用BC进行浮点运算?


42

看起来bc不支持浮点运算,当我这样做时,echo 1/8 | bc它的值为零。

我检查了bc (1),但什至没有提及float,所以我想知道是否支持它?


9
echo "scale=4; 1/8" | bc
LiuYan刘研

这个问题,尤其是已接受的答案可能对您很有趣。
伊曼纽尔·伯格

Answers:


56

bc不执行浮点运算,但执行固定精度的十进制数字。-lHauke提到的标志加载了例如的数学库。触发功能,但这也意味着

[...]默认比例为20

scale是手册页中提到的许多“特殊变量”之一。您可以设置:

scale=4

随时随地(无论是否-l使用)。它是指十进制中使用的有效数字位数。换句话说,后续的解决方案将四舍五入为小数位数后的位数(=固定精度)。

默认的小数-l位数为0,表示四舍五入为整数。


27

手册页说:

如果使用-l选项调用bc,则会预加载数学库[...]

确实,可以提高这一点的可理解性...


14
将其报告为错误的上游……
vonbrand

0

1)bc中的数字有一个小数位数。数字的小数位数不应与比例因子混淆。相同的世界“比例”用作查询数字比例的函数,或用作设置比例因子的参数。

echo "scale=scale(1.1);11/10" | bc will return 1.1

2)比例因子确定进行操作时保留在小数点右边的位数。如果s是当前比例因子,sa是第一个操作数a的小数位数,sb是第二个操作数b的小数位数,结果将被截断如下:

    scale of result
a+b     max(sa,sb)
a-b     max(sa,sb)
a*b     min(sa+sb , max(s,sa,sb))
a/b     s
a%b     so that a = b*quotient + remainder; remainder has sign of a
a^b     min(sa×|b|, max(s,sa)); b must be integer
sqrt(a) max(s,sa)

3)起源bc是dc的预处理器。现在,在许多系统上,bc是一个独立程序。

来源:[ https://plan9.io/magic/man2html/1/dc]

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.