我正在使用 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)
但当然更多的编程语言可以解决这个问题。