我正在两个浮点变量之间进行一次乘法运算。之后,我需要检查数字溢出、下溢和除以零错误(如果有)。
我怎么能做到这一点?
最佳答案
这是一种检查溢出的方法(实际上只是浮点 +Infinity 和 -Infinity):
#!perl -w
use strict;
my $x = 10 ** 200;
my $positive_overflow = $x * $x;
my $negative_overflow = -$x * $x;
print is_infinity($positive_overflow) ? 'true' : 'false';
print "\n";
print is_infinity($negative_overflow) ? 'true' : 'false';
print "\n";
sub is_infinity
{
my $x = shift;
return $x =~ /inf/i;
}
除以零很棘手,因为您实际上无法在正常程序范围内执行除法而不让它死在您身上。您可以将其包装在
eval
中:#!perl -w
use strict;
my $x = 100;
my $y = 0;
my $q = try_divide($x, $y);
print "Might be division by zero...\n" if !defined $q;
$y = 10;
$q = try_divide($x, $y);
print "$q\n";
sub try_divide
{
my $x = shift;
my $y = shift;
my $q;
eval { $q = $x / $y };
return $q;
}
关于perl - 如何检查 Perl 中的数字溢出和下溢条件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1392399/