bc 数学计算器¶
bc 是一个任意精度的计算器语言(可以说是一种编程语言),它支持变量、数组、输入输出、分支结构、循环结构、函数等基本的编程元素。在 Linux 下通常当计算器使用。
命令格式:¶
bc [ -hlwsqv ] [long-options] [ file ... ]
常用选项:¶
-i, --interactive
强制进入交互模式
-l, --mathlib
使用标准数学库
-q, --quiet
不显示欢迎信息
使用实例:¶
在使用计算器之前,首先需要了解 bc 中的基本运算符。
运算符 | 含义 |
---|---|
+ | 加法 |
- | 减法 |
* | 乘法 |
/ | 除法 |
% | 取余 |
^ | 平方 |
sqrt(x) | 平方根 |
输入 bc 命令后会进入交互模式,但是默认情况下 bc 的计算精度是 0。所以平常使用时建议加上 -l
选项。
# 默认情况下计算精度为 0
[Linux]$ bc
bc 1.07.1
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free
Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
10/4
2
10/3
3
# -l 选项计算精度为 20
[Linux]$ bc -l
bc 1.07.1
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free
Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
10/4
2.50000000000000000000
10/3
3.33333333333333333333
# 借助管道或输入重定向在单行中计算
[Linux]$ echo '10/3' | bc -l
3.33333333333333333333
[Linux]$ bc -l <<< '10/3'
3.33333333333333333333
提示
由于 bc 是交互式的程序(类似于 vi),所以退出 bc 时需要输入 quit
或者 <Ctrl+D>
高级用法¶
bc 有四个内置的环境变量,在进行高级计算时会经常用到:
变量名 | 作 用 |
---|---|
scale | 指定计算精度(即小数点后的位数),默认为 0 |
ibase | 指定输入数字的进制(2~16),默认为十进制 |
obase | 指定输出数字的进制(2~16),默认为十进制 |
last 或 . | 表示最近打印的数字 |
# 修改计算精度
[Linux]$ bc -q
scale
0
10/3
3
scale=3
10/3
3.333
# 修改输出数字的进制
[Linux]$ bc -q
obase=16
10+3
D
10+10
14
# 可以进行简单的进制转换
255
FF
# 修改输入数字的进制,字母一定要大写
[Linux]$ bc -q
ibase=16
A+B
21
a+b
0
注意
一旦设置了 obase 的值,所有的输出都会按设置的进制显示,这时显示的值可能会让人产生误解。如:
obase=10
obase
10
obase=16
obase
10
开始十进制中 10 的值为十,而设置成十六进制后,10 的值就是十六了,虽然显示的都是 10。尤其时在设置不同的 ibase 值后,计算会更让人误解,这时可以用命令 obase=A; ibase=A
重新把输入输出设置成十进制。在任何进制下,A 都等于十进制中的 10。
需要同时设置输入输出进制时,obase 要尽量放在 ibase 前面,因为 ibase 设置后,后面的数字都是以 ibase 的进制来换算的。
bc 中支持变量,26 个小写字母 a-z 都是变量,而且都赋值为 0,所以上边计算中 a+b=0。和其它编程语言一样,使用 =
为变量赋值。
[Linux]$ bc -q
n=3
(1+n)*2
8
++n
4
one=1
one+5
6
除了内置变量,bc 还有一些内置函数,在需要使用内置函数时,必须以 -l
选项启动程序。
函数名 | 作用 |
---|---|
s(x) | 计算 x 的正弦值,x 是弧度值。 |
c(x) | 计算 x 的余弦值,x 是弧度值。 |
a(x) | 计算 x 的反正切值,返回弧度值。 |
l(x) | 计算 x 的自然对数。 |
e(x) | 计算 e 的 x 次方。 |
j(n, x) | 贝塞尔函数,计算从 n 到 x 的阶数。 |