Shell 脚本:计算以实数为指数的数字的幂

Shell 脚本:计算以实数为指数的数字的幂

我正在使用 shell 脚本并使用以下表达式:

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

我想要一个实数作为指数。我注意到如果我输入 0.3,它会四舍五入为整数并取零的幂。同样,如果我在上面的表达式中使用 5.5 或 5.9 代替 0.3,我会得到相同的答案。

如何计算指数为实数而非整数的数字的幂

答案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

表达式 ^ 表达式

表达式的结果是第一个值乘以第二个值。第二个表达式必须是整数。 [...]

因此,您必须使用其他东西,例如awk

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

或者,按照丹尼斯·雅各布的建议:

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

您可以使用 r 代替 bc:

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

但当然更多的编程语言可以解决这个问题。

相关内容