如果尺度不是零,用%计算,比如3%2和46%4,往往会输出0。非0尺度的算法是如何设计的?
bc
scale=10
print 4%3 // output 0
Run Code Online (Sandbox Code Playgroud) bc
1/2
0
5/3
1
10/3
3
Run Code Online (Sandbox Code Playgroud)
将分数输入到 中时bc,结果将被截断为整数。如何避免这种行为,使得除法运算的输出是实数?
我只是从 Gnu 的 bc 开始,并且一开始就被卡住了(非常令人沮丧......)。我想将两个数字相除并得到一个浮点数作为结果:
$bc
bc 1.06.94
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
15/12
1
15.0/12.0
1
15.000000/12.000000
1
scale(15.00000)
5
Run Code Online (Sandbox Code Playgroud)
手册页说,除法返回一个与初始值具有相同比例的数字。显然这不是真的,或者我错过了一些东西。
谷歌搜索并没有带来任何新的见解(除了“BC”也可以代表“不列颠哥伦比亚省”)。
你看到我的错误了吗?更好的是,您知道 bc 的任何好的参考资料/教程吗?
>>> bc
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
ibase = 16
obase = 56
BE753DE5C17F1B6C9F5D1E8A628B74B0FFC4A7
13 54 52 19 83 18 71 14 32 84 08 11 54 04 20 50 49 70 30 00 29 44 7\
7 33
Run Code Online (Sandbox Code Playgroud)
输入显然是十六进制的。现在我假设输出应该是基数为 56 的“数字”的十进制表示。但是最高输出块应该是 55,对吗?那么为什么我会看到一个“83”和一个“84”呢?
$ echo 2*1024|bc
20480
$ echo 2.0*1024|bc
2048.0
$ echo 2*1024.0|bc
2048.0
Run Code Online (Sandbox Code Playgroud)
那这是怎么回事?
更新:
dc 管理得很好
$ echo "2 1024 * p"|dc
2048
Run Code Online (Sandbox Code Playgroud)