【发布时间】:2014-11-27 06:46:39
【问题描述】:
以下行在我的脚本中不起作用:
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' 的立方根的值。不知何故,我不明白。请给点意见。
【问题讨论】:
以下行在我的脚本中不起作用:
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' 的立方根的值。不知何故,我不明白。请给点意见。
【问题讨论】:
这行有问题:
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
或者使用@fedorqui 提到的awk
【讨论】:
log(a)除以3然后antilog()吗
您可能希望为此使用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)}')
【讨论】: