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

时间:2013-12-19 14:25:48

标签: awk precision

以下命令

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

没有输出,而这个

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

打印“true”。

This answer解释为什么第一个命令不产生输出。

可能的解决方法是

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

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

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

1 个答案:

答案 0 :(得分: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'

什么都没有......