perl – 如何计算div和mod的浮点数?

在Perl中,%运算符似乎假定整数.例如:

sub foo {
    my $n1 = shift;
    my $n2 = shift;
    print "perl's mod=" . $n1 % $n2, "\n";
    my $res = $n1 / $n2;
    my $t = int($res);
    print "my div=$t", "\n";
    $res = $res - $t;
    $res = $res * $n2;
    print "my mod=" . $res . "\n\n";
}   

foo( 3044.952963, 7.1 );
foo( 3044.952963, -7.1 );
foo( -3044.952963, 7.1 );
foo( -3044.952963, -7.1 );

perl's mod=6
my div=428
my mod=6.15296300000033

perl's mod=-1
my div=-428
my mod=6.15296300000033

perl's mod=1
my div=-428
my mod=-6.15296300000033

perl's mod=-6
my div=428
my mod=-6.15296300000033

现在你可以看到,我已经提出了一个“解决方案”已经用于计算div和mod.然而,我不明白的是每个论证的结果对结果有何影响. n2不是n2的次数吗?在这种情况下,算术应该如何工作?

最佳答案
给定a = qd r,当计算d的负值的余数时,存在歧义.

例如.:

表达式-42÷-5可表示为:
-42 = 9×(-5)3或-42 = 8×(-5)(-2).

那么其余的则是3或-2.

欲了解更多信息:Wikipedia:Remainder “Inequality satisfied by the remainder”

另外,mod / div中的负数的输出在软件语言中取决于实现.见Wikipedia: Modulo operation(看右边的表)

转载注明原文:perl – 如何计算div和mod的浮点数? - 代码日志