Bc

BC 未正確處理 scale = 0

  • August 20, 2013

我定義了 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()具有設置scalewhilecbrt()被評估的效果。解決方法是將比例儲存為函式的一部分:

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

引用自:https://unix.stackexchange.com/questions/87499