Bc
BC 未正確處理 scale = 0
我定義了 cbrt 函式來返回一個立方根。我需要取回一個整數(即使它接近立方根,在我的情況下也是可以接受的)。但是,當我將比例設置為 0 以獲得整數時,我得到的數字非常不正確。發生了什麼事,我如何得到一個整數立方根?
bc -l define cbrt(x) { return e(l(x)/3) } scale=1;cbrt(1000000) 99.4 scale=0;cbrt(1000000) 54
scale
呼叫之前的設置cbrt()
具有設置scale
whilecbrt()
被評估的效果。解決方法是將比例儲存為函式的一部分: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()
哪個臨時將 設置scale
為 5 併計算立方根(為 5 個浮點),將其分配給z
並返回該值(隱式scale
設置為 5)。然後,您可以scale=0
通過簡單地除以 1 來應用本地:scale=0; cbrt(100000)/1 99