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 的阶数。