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返すからです。それ値(暗黙的にscale5に設定されています)。その後、scale=0単に1で除算してローカル値を適用できます。

scale=0; cbrt(100000)/1
99

おすすめ記事