我正在两个浮点变量之间进行一次乘法运算。之后,我需要检查数字溢出、下溢和除以零错误(如果有)。

我怎么能做到这一点?

最佳答案

这是一种检查溢出的方法(实际上只是浮点 +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/

10-15 13:57