2014-10-02 146 views
0

下面的行不会在我的脚本工作:猛砸计算器

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

错误它给:

Runtime warning (func=(main), adr=21): non-zero scale in exponent

我只想有“A”的立方根的价值。不知何故,我没有得到它。请给点意见。

回答

1

这条线是有问题的:

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

+1

你能做到'的日志(一)'除以'3'然后'反对数()' – 2014-10-02 09:41:42

+0

@anubhava:非常感谢你,它正在工作。 – 2014-10-02 09:53:20

+0

不客气,很高兴它解决了。 – anubhava 2014-10-02 09:53:54

1

提到你可能想使用awk这个,而不是使用复杂的bc syntaxs:

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)}')