gpt4 book ai didi

perl - 如何计算 float 的 div 和 mod?

转载 作者:行者123 更新时间:2023-12-02 11:49:20 27 4
gpt4 key购买 nike

在 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

现在如您所见,我已经提出了一个用于计算 divmod 的“解决方案”。然而,我不明白的是每个参数的符号应该对结果产生什么影响。 div 不是总是正数,即 n2 适合 n1 的次数吗?在这种情况下算术应该如何工作?

最佳答案

标题提出一个问题,正文提出另一个问题。为了回答标题问题,就像在 C 中一样,% 运算符是整数模数,但有一个库例程“fmod”是浮点模数。

use POSIX "fmod";

sub foo {
my $n1 = shift;
my $n2 = shift;
print "perl's fmod=" . fmod($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 fmod=6.15296300000033
my div=428
my mod=6.15296300000033

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

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

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

关于perl - 如何计算 float 的 div 和 mod?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/494711/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com