Linux bc命令(bc指令)(基本计算器)(任意精度计算语言:支持浮点数运算、变量赋值和自定义函数等)

文章目录

  • bc命令文档
    • 英文
    • 中文
  • Linux `bc` 命令详解
    • `bc` 命令的基本用法
      • 启动 `bc` 环境
      • 进行基本计算
      • 退出 `bc`
    • `bc` 中的数学功能
      • 执行高级数学计算
        • 平方根和指数函数
        • 对数函数
      • 处理精度问题
    • 变量和数组
      • 变量赋值和使用
      • 数组的使用
    • 创建和使用自定义函数
  • `bc` 命令的高级用法
    • 在脚本中使用 `bc`
      • 基本脚本集成
      • 使用循环和条件语句
    • `bc` 中的高级数学和逻辑运算
      • 使用逻辑运算符
      • 三元运算符的使用(不支持原生语法,但是可模拟)
    • 自定义函数的进阶应用
      • 复杂函数定义
      • 函数的重用
    • 结语

bc命令文档

英文

root@ky:~# bc --help
usage: bc [options] [file ...]-h  --help         print this usage and exit-i  --interactive  force interactive mode-l  --mathlib      use the predefined math routines-q  --quiet        don't print initial banner-s  --standard     non-standard bc constructs are errors-w  --warn         warn about non-standard bc constructs-v  --version      print version information and exit

中文

root@ky:~# bc --help
usage: bc [options] [file ...]-h  --help         打印此使用信息并退出-i  --interactive  强制进入交互模式-l  --mathlib      使用预定义的数学例程-q  --quiet        不显示初始标语-s  --standard     非标准 bc 构造是错误的-w  --warn         警告非标准 bc 构造-v  --version      打印版本信息并退出

Linux bc 命令详解

bc(基本计算器)是一种在Unix和类Unix操作系统中广泛使用的任意精度计算语言。它的功能强大,支持浮点数运算、变量赋值和自定义函数等。本文将深入探讨 bc 命令的用法和特性,并提供实用的示例。

bc 命令的基本用法

启动 bc 环境

bc 可以在命令行中直接启动。默认情况下,它不会输出计算过程中的每一步结果,直到收到一个表达式并求值后才显示结果。启动 bc 的最简单方式是在命令行中输入 bc,然后按 Enter 键:

$ bc

在这里插入图片描述

进行基本计算

bc 环境中,可以执行基本的数学运算,如加、减、乘、除等。例如:

1 + 1
2 * 3
4 / 2
5 - 3

在这里插入图片描述

退出 bc

要退出 bc,可以使用 quit 命令或者组合键 Ctrl+D

quit

在这里插入图片描述

bc 中的数学功能

执行高级数学计算

bc 支持多种数学函数,包括但不限于平方根、指数、对数等。为了使用这些功能,需要在启动 bc 时加入 -l 选项,这将载入数学库。

$ bc -l

在这里插入图片描述

平方根和指数函数

计算数字的平方根可以使用 sqrt() 函数,计算指数可以使用 ^ 运算符:

sqrt(9)
2^3

在这里插入图片描述

对数函数

计算自然对数和常用对数:

l(2)    # 自然对数
l(100)/l(10)  # 常用对数,即 log10(100)

在这里插入图片描述

处理精度问题

bc 默认的小数精度较低(看着也不低啊?):

在这里插入图片描述

可以通过设置 scale 变量来调整精度。例如,计算圆周率π的值(保留十位小数):

scale=10
4*a(1)

a(x) 是反正切函数,利用数学公式

在这里插入图片描述
在这里插入图片描述

来计算。

变量和数组

变量赋值和使用

bc 中,变量可以存储计算结果,便于后续操作。赋值操作使用 = 运算符:

x = 5
y = 3 * x + 2

在这里插入图片描述

数组的使用

bc 也支持一维数组,用于存储一系列值:

arr[0] = 5
arr[1] = arr[0] * 2

在这里插入图片描述

创建和使用自定义函数

bc 允许用户定义函数,这为复杂计算提供了便利。定义函数的语法如下:

define f(x) {return (x * x + 2);
}

调用自定义函数:

f(4)

在这里插入图片描述

这部分讨论了 bc 的基本使用方法、数学功能、变量与数组的操作,以及如何创建和使用自定义函数。在下一部分中,将继续探讨如何在脚本中使用 bc 来进行批量计算和其他高级功能。

bc 命令的高级用法

在脚本中使用 bc

bc 可以被嵌入到 shell 脚本中,以执行复杂的计算任务。这是自动化计算任务的一个有效方法。

基本脚本集成

可以通过将表达式传递给 bc 来从 bash 脚本中调用 bc。例如,下面的脚本用于计算两个变量的乘积:

#!/bin/bash
a=5
b=6
result=$(echo "$a * $b" | bc)
echo "The result is $result"

在这里插入图片描述

使用循环和条件语句

bc 也支持循环和条件语句,这可以在更复杂的脚本中使用。例如,一个计算阶乘的 bc 脚本:

#!/bin/bash
n=5
factorial=1for ((i = 1; i <= n; i++)); dofactorial=$(echo "$factorial * $i" | bc)echo "The temp factorial is $factorial"
doneecho "The factorial of $n is $factorial"

在这里插入图片描述

bc 中的高级数学和逻辑运算

使用逻辑运算符

bc 支持逻辑运算符,这使得在执行数学计算时可以包括条件测试。逻辑运算符包括 <><=>===!=

#!/bin/bash
x=5
# x=15
y=10
check=$(echo "$x < $y" | bc)
echo "check is $check"
if [ "$check" -eq 1 ]; thenecho "$x is less than $y"
elseecho "$x is not less than $y"
fi

在这里插入图片描述

三元运算符的使用(不支持原生语法,但是可模拟)

bc支持 C 风格的三元运算符 ?:,可以在单行内进行条件判断和赋值:

result=$(echo "a = 5; b = 3; a > b ? a : b" | bc)
echo "The larger number is $result"

报错了:

在这里插入图片描述

可改成:

#!/bin/bashresult=$(echo "a = 5; b = 3; if (a > b) a else b" | bc)
echo "The larger number is $result"

在这里插入图片描述

解释:

bc 中使用三元运算符时确实需要特别的格式,由于 bc 对于标准的三元运算符支持不同于一些其他编程环境。要在 bc 中正确使用三元运算符,必须确保 bc 在处理表达式时已经启用了扩展语法。这通常可以通过使用 -l 选项来启动 bc 来确保启用。

修改后的脚本如下:

#!/bin/bashresult=$(echo "a = 5; b = 3; if (a > b) a else b" | bc) echo "The
larger number is $result" 

在这个修改后的版本中,我使用了 if-else 语句替代了三元运算符,因为 bc 的标准版本中没有内建支持类似于 C 语言风格的三元运算符。使用 if-else 语句是在 bc 中进行条件判断的一种有效方式。

自定义函数的进阶应用

复杂函数定义

bc 中可以定义更复杂的函数,例如实现递归计算。以下是一个计算斐波那契数列的函数:

define fib(n) {if (n <= 2) return 1;return (fib(n-1) + fib(n-2));
}

在这里插入图片描述

函数的重用

定义好的函数可以在多个计算中重复使用,提高代码的复用性和清晰度。例如,定义一个计算组合数的函数,然后用于求解不同的组合问题:

define comb(n, k) {if (k == 0 || k == n) return 1;return (comb(n-1, k-1) + comb(n-1, k));
}

定义的 comb(n, k) 函数计算的是从 n 个元素中选择 k 个元素的组合数,也被称为二项式系数。在数学上,这个值通常表示为 “C(n, k)” 或
在这里插入图片描述
,并且可以用以下的数学公式计算:

在这里插入图片描述

这个函数使用了递归的方法来计算组合数。递归的基本案例是当 k == 0k == n 时,组合数是 1,因为从 n 个元素中选择 0 个或所有 n 个元素的方式只有一种。对于其他情况,组合数是从前 n-1 个元素中选择 k-1 个元素的组合数加上从前 n-1 个元素中选择 k 个元素的组合数。这是基于组合数的递归性质:每个元素都有两种可能,要么被选中,要么不被选中。

如果想在 bc 中使用这个函数来计算具体的组合数,可以按照之前提供的方法将函数定义和调用放入 Bash 脚本,并通过 bc 执行。这里是一个如何使用这个函数的示例:

#!/bin/bash# 定义和调用组合数函数
calculate_comb() {bc <<EOF
define comb(n, k) {if (k == 0 || k == n) return 1;return comb(n-1, k-1) + comb(n-1, k);
}
comb($1, $2)
EOF
}# 调用函数计算组合数 C(5, 2)
result=$(calculate_comb 5 2)
echo "C(5, 2) is $result"

在这里插入图片描述·

这个脚本将计算从 5 个元素中选择 2 个元素的组合数,并输出结果。

关于here document重定向,可参考文章:Shell脚本 <<EOF … EOF语法(Here Document)(特殊的输入重定向方式)(定界符)

结语

通过深入探讨 bc 命令的基础与高级用法,可以看出其在处理数学和逻辑运算中的强大能力。无论是在交互式环境中快速计算,还是作为脚本的一部分自动化复杂计算任务,bc 都是一个非常有用的工具。通过本文的介绍,希望能帮助读者更好地理解和运用这个功能强大的命令行计算器。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/13186.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Google I/O 大会 | 精彩看点一览

作者 / 开发者关系和开源总监 Timothy Jordan 2024 年 Google I/O 大会于北京时间 5 月 15 日 1:00am 在加利福尼亚的山景城以 Google 主题演讲直播拉开序幕。随后&#xff0c;在北京时间 4:30am 举行开发者主题演讲。大家可前往回看 "Google 主题演讲" 以及 "开…

AIGC时代已至,你准备好抓住机遇了吗?

一、行业前景 AIGC&#xff0c;即人工智能生成内容&#xff0c;是近年来人工智能领域中发展迅猛的一个分支。随着大数据、云计算、机器学习等技术的不断进步&#xff0c;AIGC已经取得了显著的成果&#xff0c;并且在广告、游戏、自媒体、教育、电商等多个领域实现了广泛应用。…

DolphinScheduler(海豚调度)- docker部署实战

1.官方文档 https://dolphinscheduler.apache.org/zh-cn/docs/3.2.1/guide/start/docker 2.docker环境安装 版本情况&#xff08;这个地方踩了不少坑&#xff09;&#xff1a;docker-26.1.2&#xff0c;docker-compose-v2.11.0。 具体可使用我上传的安装包&#xff0c;一键安…

MT3037 新月轩就餐

思路&#xff1a; 此题每道菜的价钱相同&#xff0c;想最小化付的钱即求最小区间长度可以满足“品尝到所有名厨手艺”。 使用双端队列存储元素&#xff0c;队尾不断向后遍历&#xff1a;头->尾 如果队头队尾&#xff0c;则队头往右移一格&#xff0c;直到区间不同元素数m…

Docker部署MaxKB详细步骤(window系统)

上面章节已经实现了ollama李现部署llama3&#xff0c;并实现了一些简单的问答&#xff0c;但是问答的界面是在命令提示符中&#xff0c;交互很不友好&#xff0c;也不方便局域网其他用户访问&#xff0c;所以这节用docker部署MaxKB实现网页访问llama3&#xff0c;首先电脑上需要…

分布式系统的一致性与共识算法(四)

Etcd与Raft算法 Raft保证读请求Linearizability的方法: 1.Leader把每次读请求作为一条日志记录&#xff0c;以日志复制的形式提交&#xff0c;并应用到状态机后&#xff0c;读取状态机中的数据返回(一次RTT、一次磁盘写)2.使用Leader Lease&#xff0c;保证整个集群只有一个L…

使用Flask-RESTful构建RESTful API

文章目录 安装Flask-RESTful导入模块和类创建一个资源类运行应用测试API总结 Flask是一个轻量级的Python web开发框架&#xff0c;而Flask-RESTful是一个基于Flask的扩展&#xff0c;专门用于构建RESTful API。它提供了一些帮助类和方法&#xff0c;使构建API变得更加简单和高效…

详细分析Vue3中的reactive(附Demo)

目录 1. 基本知识2. 用法3. Demo 1. 基本知识 reactive 是一个函数&#xff0c;用于将一个普通的 JavaScript 对象转换为响应式对象 当对象的属性发生变化时&#xff0c;Vue 会自动追踪这些变化&#xff0c;并触发相应的更新 Vue2没有&#xff0c;而Vue3中有&#xff0c;为啥…

公司邮箱是什么?公司邮箱和个人邮箱有什么不同?

公司邮箱是企业用来收发邮件的专业版电子邮箱&#xff0c;不同于个人邮箱的简单功能和有限的存储空间&#xff0c;公司邮箱的功能更加丰富&#xff0c;能够满足企业的日常办公和协作需求。本文将为您详细讲解公司邮箱和个人邮箱的区别&#xff0c;以供您选择更适合自己的邮箱类…

嵌入式——C51版本Keil环境搭建

&#x1f3ac; 秋野酱&#xff1a;《个人主页》 &#x1f525; 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 目标搭建流程下载与安装激活STC环境添加校验是否导入STC环境 目标 ● 了解C51版本Keil开发环境的概念和用途 ● 掌握C51版本Keil环…

2024年NOC大赛创客智慧(西瓜创客)Python复赛编程真题模拟试卷包含答案

NOC复赛python模拟题 1.编写一个程序&#xff0c;提示用户输人一个矩形的长度和宽度&#xff0c;并输出其面积, 2.试计算在区间 1 到 n的所有整数中,数字x(0≤x≤9)共出现了多少次?例如在 1到11 中&#xff0c;即在 1,2,3.45,6.7,8.9,10,11 中&#xff0c;数字 1出现了 4 次.…

鸿蒙生态融合进行时!菊风启动适配HarmonyOS NEXT,赋能原生应用实时

​​今日话题 鸿蒙HarmonyOS NEXT 自华为公开宣布鸿蒙 HarmonyOS NEXT 系统以来&#xff0c;该系统受到了业内广泛关注&#xff0c;和以往鸿蒙系统不同的是该系统底座完全由华为自研&#xff0c;摒弃了 Linux 内核和安卓 AOSP 代码&#xff0c;仅兼容鸿蒙内核及鸿蒙系统的应用…

Leetcode---1.两数之和 (详解加哈希表解释和使用)

文章目录 题目 [两数之和](https://leetcode.cn/problems/two-sum/)方法一&#xff1a;暴力枚举代码方法二&#xff1a;哈希表代码 哈希表哈希表的基本概念哈希函数&#xff08;Hash Function&#xff09;&#xff1a;冲突&#xff08;Collision&#xff09;&#xff1a;链地址…

windows驱动开发-PCI讨论(一)

前面描述中断的时候&#xff0c;我们曾经多次体积PCI&#xff0c;甚至提供了一些PCI的相关知识&#xff0c;但是整个PCI是一个很大的体系&#xff0c;专门记录这个体系超出了这个系列的范畴&#xff0c;有兴趣的可以到PCI官网了解详细的情况。 但是还是会花费一些时间讨论PCI技…

Pytorch入门实战 P10-使用pytorch实现车牌识别

目录 前言 一、MyDataset文件 二、完整代码&#xff1a; 三、结果展示&#xff1a; 四、添加accuracy值 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 本周的学习内容是&#xff0…

国网698.45报文解析工具

本文分享一个698.45协议的报文解析工具&#xff0c;此报文解析工具功能强大&#xff0c;可以解析多种国网数据协议。 下载链接: https://pan.baidu.com/s/1ngbBG-yL8ucRWLDflqzEnQ 提取码: y1de 主要界面如下&#xff1a; 本工具内置698.45数据协议&#xff0c; 即可调用word…

win编写bat脚本启动java服务

新建txt&#xff0c;编写&#xff0c;前台启动&#xff0c;出现cmd黑窗口 echo off start java -jar zhoao1.jar start java -jar zhoao2.jar pause完成后&#xff0c;重命名.bat 1、后台启动&#xff0c;不出现cmd黑窗口&#xff0c;app是窗口名称 echo off start "名…

美团小程序mtgsig1.2逆向

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01;wx a15018601872 本文章未…

VMware虚拟机没有网,无法设置网络为桥接状态

今天需要使用Ubuntu18但现有虚拟机是Ubuntu20&#xff0c;由于硬盘空间不够大&#xff0c;所以删除了原来的虚拟机并重新搭建Ubuntu18的环境&#xff0c;然后发现虚拟机没有网络&#xff0c;而我之前的虚拟机这一切都是正常的。 在网络设置里勾选的是桥接模式但无法联网&#x…

Cow Exhibition G的来龙去脉

[USACO03FALL] Cow Exhibition G - 洛谷 曲折经过 爆搜 一开始没什么好的想法&#xff0c;就针对每头奶牛去or不去进行了爆搜。 #include <cstdio> #include <algorithm> using namespace std;#define maxn 405 int iq[maxn], eq[maxn]; int ans; int n;void d…