为什么Perl Modulo操作员使用Bignum与大整数合作,而不是Math :: Bigint



我在perl脚本中尝试了以下内容:

$b = 19999999999999999 % 10000000000000000;
print "$bn";

它错误地输出了0

然后我找到了一个答案,说使用bignum

use bignum;
$b = 19999999999999999 % 10000000000000000;
print "$bn";

它正确输出了9999999999999999

但是bignum只是将所有整数常数转换为Math :: Bigint。因此,我尝试了以下内容,该措施应与使用bignum相同:

use Math::BigInt;
$b = Math::BigInt->new(19999999999999999) % Math::BigInt->new(10000000000000000);
print "$bn";

,但错误地输出了0。我在数学上做错了什么:: bigint?

您仍首先使用本机Perl号码,然后将它们转换为Math::BigInt对象。改用此方法:

my $x = Math::BigInt->new('19999999999999999') % Math::BigInt->new('10000000000000000');

引用perldoc Math::BigInt

给出的标量数字可能会失去精度。引用您的输入以确保不会丢失数字:

$x = Math::BigInt->new( 56789012345678901234 );   # bad
$x = Math::BigInt->new('56789012345678901234');   # good

(也不要在sort和类似例程外使用$b。(

最新更新