我定义了 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)
scale
调用之前的设置具有设置同时评估cbrt()
的效果。解决方法是将比例存储为函数的一部分:scale
cbrt()
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()
临时将scale
5 设置为 5 并计算立方根(5 个浮点),将其分配给z
并返回该值(隐式设置scale
为 5)。scale=0
然后您可以通过简单地除以 1 来应用局部值:
scale=0; cbrt(100000)/1
99
Run Code Online (Sandbox Code Playgroud)