シェルスクリプト: 実数指数を使用して数値の累乗を計算する

シェルスクリプト: 実数指数を使用して数値の累乗を計算する

シェルスクリプトを使用しており、次の式を使用しています。

A=`echo "(( (($a / $b) ^ 0.3) -1 ))" |bc -l`

指数で間違いが欲しい0.3 を入力すると整数に丸められ、ゼロの累乗に上がることを確認しました。同様に、上記の式で0.3の代わりに5.5や5.9を使用しても同じ答えが得られます。

指数が整数ではなく実数である数値の累乗を計算する方法

答え1

^非整数指数を見つけるために演算子を直接使用することはできませんが、等式を使用できます。

a b = e ln(a) × b

e自然ログの基礎として使用されます。bc、オプションと一緒に呼び出されると、関数があり、-lそれぞれe基本l的なe二乗と自然対数をa^b計算しますe(l(a)*b)

たとえば、2 0.5(2の平方根)の場合:

$ echo 'e(l(2)*0.5)' | bc -l
1.41421356237309504878

答え2

なぜawkやperl one-linerを使って処理できないのですか?

echo "$a $b" | awk '{ print ((($1/$2)^0.3) -1); }'

答え3

あなたがそれを使用することはできませんかbc。浮動小数点指数をサポートしていません。説明したようにman bc

表現^表現

式の結果は、最初の値に2番目の値を掛けたものです。2番目の式は整数でなければなりません。。 [...]

したがって、次のような他のものを使用する必要がありますawk

awk -va="$a" -vb="$b" 'BEGIN{print ((a/b)^0.3)-1}'

またはDennis Jacobsが提案したように:

echo "$a $b" | awk '{print ((($1/$2)^0.3) -1);}'

またはperl:

perl -le 'print ((($ARGV[0]/$ARGV[1])**0.3)-1)' "$a" "$b"

または

echo "$a $b" | perl -lane 'print ((($F[0]/$F[1])**0.3) -1)'

答え4

bcの代わりにrを使用できます。

A=$(echo "x=( ( ($a / $b) ** .3 ) -1 );print (x)" | r)

しかし、もちろん、より多くのプログラミング言語がこの問題を解決することができます。

関連情報