gol*_*cks 72
bc不做浮点,但它做固定精度的十进制数。-lHauke 提到的标志加载了一个数学库,例如。触发功能,但它也意味着
[...] 默认比例为 20
scale是手册页中提到的许多“特殊变量”之一。你可以设置它:
scale=4
Run Code Online (Sandbox Code Playgroud)
随时随地(无论是否-l使用)。它指的是十进制中使用的有效数字的位数。换句话说,后续解决方案将四舍五入到小数点后的位数(== 固定精度)。
默认比例 sans-l为 0,表示四舍五入为整数。
当我这样做时,我
echo 1/8 | bc得到一个零。
是的,默认情况下,scale 的值(小数位数)为零 (0),在这种情况下,bc仍然进行任意精度数学运算,但点后没有数字。
$ echo 234^34 | bc
35755195084527581333820034812187200823956346053610939764649481375776\
5274080116736
Run Code Online (Sandbox Code Playgroud)
即:整数任意精度数学。
通过更改变量scale的值,可以更改小数位数:
$ echo 'scale=3; 1/8' | bc
.125
$ echo 'scale=27; 1/8' | bc
.125000000000000000000000000
Run Code Online (Sandbox Code Playgroud)
看起来 bc 不支持浮点运算
不, bc 没有浮点数的概念(至少在 IEEE-754中定义)。
bc 所做的是小数部分的任意精度数学运算(有限的小数位数,小数点分隔符后的位数)。
小数点分隔符后的位数由变量设置scale。
$ echo 'scale=5; sqrt(2)' | bc
1.41421
$ echo 'scale=35; sqrt(2)' | bc
1.41421356237309504880168872420969807
Run Code Online (Sandbox Code Playgroud)
该功能sqrt是基本的,是默认的一部分bc。
可以加载其他一些函数(log、sen、cos、atan 等)bc -l
s (x) The sine of x, x is in radians.
c (x) The cosine of x, x is in radians.
a (x) The arctangent of x, arctangent returns radians.
l (x) The natural logarithm of x.
e (x) The exponential function of raising e to the value x.
j (n,x) The Bessel function of integer order n of x.
Run Code Online (Sandbox Code Playgroud)
这也将比例设置为 20(可以在启动后更改)。
所以:
$ echo '1/8' | /bin/bc -l
.12500000000000000000
Run Code Online (Sandbox Code Playgroud)