我定义了 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()
的效果。解决方法是将比例存储为函数的一部分:scale
cbrt()
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