BC 未正确处理比例 = 0

BC 未正确处理比例 = 0

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

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

答案1

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

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

当调用时给出:

scale=0; cbrt(1000000)
99.99998

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

scale=0; cbrt(100000)/1
99

相关内容