Bin*_*hou 5 floating-point perl
我写了以下Perl脚本.但是,它不会打印"1".我做了一些研究,似乎是因为IEEE表示浮点数.那么,有没有更好的方法来比较Perl中的浮点数?
for (my $tmp = 0.1; $tmp <= 1; $tmp+=0.05){print $tmp."\n"}
Run Code Online (Sandbox Code Playgroud)
输出:
0.1
0.15
0.2
0.25
0.3
0.35
0.4
0.45
0.5
0.55
0.6
0.65
0.7
0.75
0.8
0.85
0.9
0.95
Run Code Online (Sandbox Code Playgroud)
所有使用浮点数的计算都可能存在精度错误,如果重复使用结果,那些精确错误就会叠加.从中学到的一件事是永远不要使用float作为循环控制变量.
使用类似的东西
for (my $tmp=2; $tmp<=20; tmp++) {
print $tmp/20.0, "\n";
}
Run Code Online (Sandbox Code Playgroud)
无论你怎么做.如果你真的需要比较两个花车的($a, $b)东西
if (abs($a - $b) < 0.000001)
Run Code Online (Sandbox Code Playgroud)
是唯一真正有用的东西 - 然而,这也可能有问题,这取决于差异可以算作真正差异的程度.
将所有内容相乘以使您只使用整数 - 在本例中为100.
然后当你打印数字时,将它除以相同的数字;
for (my $tmp = 10; $tmp <= 100; $tmp+=5){print $tmp/100 ."\n"}
Run Code Online (Sandbox Code Playgroud)
给我:
0.1
0.15
0.2
0.25
0.3
0.35
0.4
0.45
0.5
0.55
0.6
0.65
0.7
0.75
0.8
0.85
0.9
0.95
1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5977 次 |
| 最近记录: |