awk 与小于 1.7e-308 的数字比较

问题描述 投票:0回答:2

以下命令

echo 1.8e-308 | gawk '$1<0.05'

不产生任何输出,而这个

gawk 'BEGIN{if(8.2547e-309<0.05){print "true"}}'

打印“true”。

这个答案解释了为什么第一个命令不产生otuput。

一个可能的解决方法是

echo 1.8e-308 | awk '$1+0 < 0.05 {print}'

我的问题是:有更好的解决方案吗?例如 awk 的一些包装器不允许修改每个脚本。

最佳解决方案可能不需要重新编译 awk 来使用 mpfr 库。

awk precision
2个回答
1
投票

尝试以下操作:

echo 1.8e-308 | gawk '($1+0)<0.05'

产生:

1.8e-308

其他一些有趣的观察:

echo "True" | gawk '1.8e-308<0.05'

给予

True

echo "True" | gawk '1.8e-322<1.9e-322'

给予

True

echo "True" | gawk '1.8e-323<1.9e-323'

什么也没提供..


0
投票

请注意这些细微差别:(

[X]
:=
TRUE
)

      ($1 < "-3") (+$1 < "-3") ($1 < -3) ($1 < -3 "") ($1 < __)

-4            .          .         [X]         .         [X]
.4e1          .          .          .          .          . 
 4.           .          .          .          .          . 
 40e-1        .          .          .          .          . 

 4            .          .          .          .          . 
+4           [X]         .          .         [X]         . 
-2           [X]        [X]         .         [X]         . 
-2v          [X]        [X]        [X]        [X]        [X]

变量

__
通过命令行赋值设置

awk '...' __='-3'
© www.soinside.com 2019 - 2024. All rights reserved.