内部perl和内部shell之间的浮点计算差异

时间:2014-03-06 20:03:56

标签: perl awk

我很困惑。这是我遇到的。

我写了一个perl代码来计算两个数字的差异,并根据差异是否大于0.5,它决定是否打印该行。

举一个玩具示例:

a   0.9 0.4
b   0.8 0.2
c   0.7 0.3
d   0.81 0.3
e   0.79 0.3

所以代码应该打印出a,b,d行而不是c,e。我尝试了两种方法:

1.直接测试差异是否大于或等于0.5,如果是,请打印:

chomp;
my @array = split/\t/;
my $diff = $array[1] - $array[2];
if ($diff >=0.5) {
    print $_;
 }

2.首先将差异输出到文件中,然后使用awk选择:

 print $_,"\t",$diff,"\n";

Then with awk:
awk '{ if ($NF >= 0.5) print}' file 

我很惊讶地发现这两种方式为我的实际文件生成了两个不同的结果(百万行)。 awk方式给出了更多的结果。我查看了两个输出的不同之处,似乎使用了所有perl方式(1)错过了一些行。

有谁知道为什么会这样?在perl中执行此计算和条件测试是否有问题?

1 个答案:

答案 0 :(得分:1)

您可能需要查看Math::BigFloat Perl模块,查看与精度相关的方法。你能提供一些在perl脚本和awk脚本之间产生不同结果的行的输入值吗?