BC 没有正确处理 scale = 0

Fir*_*ame 6 bc

我定义了 cbrt 函数来返回一个立方根。我需要取回一个整数(即使它接近立方根,在我的情况下也是可以接受的)。但是,当我将比例设置为 0 以获得整数时,我得到的数字非常不正确。这是怎么回事,我如何得到一个整数立方根?

bc -l
define cbrt(x) { return e(l(x)/3) }
scale=1;cbrt(1000000)
99.4
scale=0;cbrt(1000000)
54
Run Code Online (Sandbox Code Playgroud)

Dra*_*oan 5

scale调用之前的设置具有设置同时评估cbrt()的效果。解决方法是将比例存储为函数的一部分:scalecbrt()

define cbrt(x) { auto z, var; z=scale; scale=5; var = e(l(x)/3); scale=z; return (var); }
Run Code Online (Sandbox Code Playgroud)

当调用时给出:

scale=0; cbrt(1000000)
99.99998
Run Code Online (Sandbox Code Playgroud)

这似乎忽略了这一点scale=0。这是因为它会计算cbrt()临时将scale5 设置为 5 并计算立方根(5 个浮点),将其分配给z并返回值(隐式设置scale为 5)。scale=0然后您可以通过简单地除以 1 来应用局部值:

scale=0; cbrt(100000)/1
99
Run Code Online (Sandbox Code Playgroud)