[英]AWK: Getting +nan when calculating power of number
使用变量时的问题
echo ""| awk '{
x=-0.35
print x^1.35
print -0.35^1.35
}'
结果
+nan
-0.242377
使用 GNU awk
output 是正确的。
幂运算符^
的优先级高于否定运算符。 因此, x^1.35
是(-0.35)^1.35
(非整数次方的负数是一个复数,解释为-nan
),但-0.35^1.35
是-(0.35^1.35)
,一个负正数正数的幂。
请参阅DYZ的答案。 我的回答现在看起来有点滑稽,但我认为出于教育目的至少应保留几天。
实际上,当正确括起来以产生相同的数学运算时,您的两个表达式都会产生+nan
。
echo ""| awk '{ x=-0.35; print x^1.35; print (-0.35)^1.35; x=0.35; print x^1.35; print (0.35)^1.35; }'
+nan
+nan
0.242377
0.242377
和 Perl 有同样的错误:
perl -le '$x = -0.35; print $x**1.35; print "" . (-0.35)**1.35; $x = 0.35; print $x**1.35; print "" . (0.35)**1.35; '
NaN
NaN
0.242377253454738
0.242377253454738
正如您现在可能已经猜到的那样,负数的非整数次幂会产生NaN
:
perl -le 'for $y (qw(0.1 0.5 1 1.35 2)) { for $x (qw(-2 -0.35 -0.1)) { print join "\t", "($x)", "**$y", $x**$y; } }'
(-2) **0.1 NaN
(-0.35) **0.1 NaN
(-0.1) **0.1 NaN
(-2) **0.5 NaN
(-0.35) **0.5 NaN
(-0.1) **0.5 NaN
(-2) **1 -2
(-0.35) **1 -0.35
(-0.1) **1 -0.1
(-2) **1.35 NaN
(-0.35) **1.35 NaN
(-0.1) **1.35 NaN
(-2) **2 4
(-0.35) **2 0.1225
(-0.1) **2 0.01
我怀疑 Perl 和 awk 使用类似的低级库,在这种情况下会产生NaN
。
在大学里,我被要求用整个学期学习复杂的数学,这是这个问题的数学核心:
-0.35^1.35 =
-0.35^(135/100) =
-0.35^(27/20) =
((-0.35^27))^1/20) =
(-0.00000000000049)^1/20 =
0.242377253454738i (or "nan" if constrained to real #s)
-0.35^1.35 =
-0.35^(135/100) =
-0.35^(27/20) =
-0.35^(54/40) =
((-0.35^54))^1/40) =
(2.397035107846411e-25)^1/40 =
0.242377253454738
-- 所以,答案是有两个答案。 你今天的新词是“复共轭”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.