Perl 为什么Math::BigInt有错误的输出?
我需要获得可被Perl 为什么Math::BigInt有错误的输出?,perl,bigint,Perl,Bigint,我需要获得可被$divisior整除的最接近的数字$new到$orig。$new应大于$orig。因此,我得出了以下公式(希望没有错误): 现在,$orig数字是一个整数,最多有30位数字。我想使用Math::BigInt将其实现到一个Perl函数中,但是输出是非常错误的 使用Math::BigInt; 数学:BigInt->精度(60); 数学:BigInt->precision(60); 我的$orig=Math::BigInt->new('5967920747781284236947735
$divisior
整除的最接近的数字$new
到$orig
。$new
应大于$orig
。因此,我得出了以下公式(希望没有错误):
现在,$orig
数字是一个整数,最多有30位数字。我想使用Math::BigInt
将其实现到一个Perl函数中,但是输出是非常错误的
使用Math::BigInt;
数学:BigInt->精度(60);
数学:BigInt->precision(60);
我的$orig=Math::BigInt->new('59679207477812842369477355441');#A.
我的$divisor=Math::BigInt->new('719');#B
我的$modulo=$orig->bmod($divisor);#A%B=M
my$diff=$divisor->bsub($modulo);#B-M=D
我的$new=$orig->badd($diff);#A+D=N
我的$test=$new->bdiv($divisor);#不适用=0
打印(“orig:$orig\n”)#10; 应为:5967920747812842369477355441
打印(“模:$modulo\n”);#10; 应该是:648
打印(“diff:$diff\n”)#71; 应该是:71
打印(“新:$new\n”);#10; 应为:5967920747812842369477355512
打印(“测试:$test\n”);#10; 应为:0
:“这些方法修改invocand对象并返回它。”换句话说,bmod
、bsub
和badd
类似于%=
、-=
和+=
,而不是%
、-
和+
因此,无论在何处调用算术方法之一,都应首先进行复制,以便当前调用该方法的对象不会发生更改:
use Math::BigInt;
Math::BigInt->accuracy(60);
Math::BigInt->precision(60);
my $orig = Math::BigInt->new('5967920747812842369477355441'); # A
my $divisor = Math::BigInt->new('719'); # B
my $modulo = $orig->copy->bmod($divisor); # A % B = M
my $diff = $divisor->copy->bsub($modulo); # B - M = D
my $new = $orig->copy->badd($diff); # A + D = N
my $test = $new->copy->bmod($divisor); # N % B = 0
print("orig : $orig\n"); # 10; should be: 5967920747812842369477355441
print("modulo : $modulo\n"); # 10; should be: 648
print("diff : $diff\n"); # 71; should be: 71
print("new : $new\n"); # 10; should be: 5967920747812842369477355512
print("test : $test\n"); # 10; should be: 0
(还将您的测试更改为执行模数,而不是除法。):“这些方法修改invocand对象并返回它。”换句话说,bmod
、bsub
和badd
类似于%=
、-=
和+=/code>,而不是%
、-
、
因此,无论在何处调用算术方法之一,都应首先进行复制,以便当前调用该方法的对象不会发生更改:
use Math::BigInt;
Math::BigInt->accuracy(60);
Math::BigInt->precision(60);
my $orig = Math::BigInt->new('5967920747812842369477355441'); # A
my $divisor = Math::BigInt->new('719'); # B
my $modulo = $orig->copy->bmod($divisor); # A % B = M
my $diff = $divisor->copy->bsub($modulo); # B - M = D
my $new = $orig->copy->badd($diff); # A + D = N
my $test = $new->copy->bmod($divisor); # N % B = 0
print("orig : $orig\n"); # 10; should be: 5967920747812842369477355441
print("modulo : $modulo\n"); # 10; should be: 648
print("diff : $diff\n"); # 71; should be: 71
print("new : $new\n"); # 10; should be: 5967920747812842369477355512
print("test : $test\n"); # 10; should be: 0
(还将测试更改为执行模数,而不是除法。)