使用变量时的问题
echo ""| awk '{
x=-0.35
print x^1.35
print -0.35^1.35
}'
结果
+nan
-0.242377
使用 GNU awk
输出是正确.
幂运算符
^
的优先级高于否定运算符。因此,x^1.35
是(-0.35)^1.35
(负数的非整数次幂是复数,解释为-nan
),但-0.35^1.35
是-(0.35^1.35)
,一个正数的负正幂。
@Ivan:理解为什么
nan
的最简单方法是使用 gawk
探查器向您展示 awk
究竟如何查看您的代码,并注意最后打印语句中的 (…)
:
those 5 expressions in 2nd print statement AREN'T all equivalent to each other, just partial subsets among them, as seen when plugging in a positive value for x instead
gawk -p- -v PREC=65536 -Mbe 'BEGIN { OFMT = "%.37g"; OFS = "\f\r\t"
for(x = -0.35; x < 1; x += 0.7) {
print x, x^1.35,
(-0.35)^1.35
print "-----",
x^exp(1/2), x^exp(1)^2^-1, x^sqrt(exp(1)),
" { -*-*-*-*- }", sqrt(x^exp(1)), x^(exp(1)/2)
print "———"
print -(-0.35)^1.35, -0.35^1.35 } }'
-0.35
+nan
+nan
-----
+nan
+nan
+nan
{ -*-*-*-*- }
+nan
+nan
------
-nan
-0.2423772534547380715986015819725977279
0.35
0.2423772534547380715986015819725977279
+nan
-----
0.1771312905039259557488872422384548101
0.1771312905039259557488872422384548101
0.1771312905039259557488872422384548101
{ -*-*-*-*- }
0.2400624449792419477761639194880532529
0.2400624449792419477761639194880532529
------
-nan
-0.2423772534547380715986015819725977279
# gawk profile, created Mon Apr 3 23:18:54 2023
# BEGIN rule(s)
BEGIN {
1 OFMT = "%.37g"
1 OFS = "\f\r\t"
2 for (x = -0.35; x < 1; x += 0.7) {
2 print x, x ^ 1.35, (-0.35) ^ 1.35
2 print "-----", x ^ exp(1 / 2), x ^ exp(1) ^ 2 ^ -1,
x ^ sqrt( exp(1) ),
" { -*-*-*-*- }",
sqrt(x ^ exp(1)), x ^ (exp(1) / 2)
2 print "------"
2 print -(-0.35) ^ 1.35, -(0.35 ^ 1.35)
}
}