1

スクリプトで次の行が機能しません。

a=$(echo "scale=3;(2*$j/(sqrt(3)*$i))" | bc)
a1=$(echo `expr "scale=3; $a^(1/3)"` | bc -l)

それが与えているエラー:

ランタイム警告 (func=(main)、adr=21): 指数のスケールがゼロでない

「a」の立方根の値が欲しいだけです。どういうわけか、私はそれを取得していません。アイデアをください。

4

2 に答える 2

2

この行には問題があります:

a1=$(echo `expr "scale=3; $a^(1/3)"` | bc -l)

のべき乗として非整数値を使用できないためですbc

このエラーを再現する例:

bc -l
bc 1.06
sqrt(3)^(1/3)
Runtime warning (func=(main), adr=11): non-zero scale in exponent
1

解決:

この関数を使用して立方根を計算できます。

a1=$(bc -l <<< "scale=3; e(l($i)/3)")

例:

i=8; bc -l <<< "scale=3; e(l($i)/3)"
1.999

またはawk、@ fedorqui で言及されているように使用します

于 2014-10-02T09:40:34.463 に答える
1

複雑な構文awkを使用する代わりに、おそらくこれを使用することをお勧めします。bc

awk -v num=$bash_variable 'BEGIN{print num^(1/3)}'

例えば:

v=3
awk -v num=$v 'BEGIN{print num^(1/3)}'

戻り値: 1.44225.

または、さらに使用するために変数を保存します。

var=$(awk -v num=$v 'BEGIN{print num^(1/3)}')
于 2014-10-02T09:44:39.347 に答える