首页 > 解决方案 > Math::BigInt:进行两次连续算术运算的结果不是预期的

问题描述

我试图保持两个连续的操作$x->badd(1)$x->bmuladd(2,-1)使用 Math::BigInt如下代码所示:

use strict;
use warnings;
use Math::BigInt;

my $k = '1329227995784915872903807060280344577'; 
my $x = Math::BigInt->new($k);

my $y = $x->badd(1);
my $z = $x->bmuladd(2,-1);


print "value to variable z $z\n";

print "value to variable y is $y\n";

但我不明白输出如下所示的原因:

value to variable z 2658455991569831745807614120560689155
value to variable y is 2658455991569831745807614120560689155

代替:

value to variable z 2658455991569831745807614120560689153
value to variable y is 1329227995784915872903807060280344578

我只能获取变量的值,$z或者$y如果我分别从以下两种形式之一获取:

1)

use strict;
use warnings;
use Math::BigInt;

my $k = '1329227995784915872903807060280344577'; 
my $x = Math::BigInt->new($k);

#my $y = $x->badd(1);
my $z = $x->bmuladd(2,-1);


print "value to variable z $z\n";

#print "value to variable y is $y\n";

或者 ...

2)

use strict;
use warnings;
use Math::BigInt;

my $k = '1329227995784915872903807060280344577'; 
my $x = Math::BigInt->new($k);

my $y = $x->badd(1);
#my $z = $x->bmuladd(2,-1);


#print "value to variable z $z\n";

print "value to variable y is $y\n";

我做错了什么或我没有做什么?

编辑更新:

我相信我需要了解变量值的操作(也就是说,我相信$x第一次操作的结果仍然存在,并且有必要使用它$x->bsub(1)来恢复其原始状态),因为按照以下方式我能够得到预期的结果:

use strict;
use warnings;
use Math::BigInt;

my $k = '1329227995784915872903807060280344577'; 
my $x = Math::BigInt->new($k);

my $y = $x->badd(1);

print "value to variable y is $y\n";

my $u = $y->bsub(1);

my $z = $u->bmuladd(2,-1);

print "value to variable z $z\n";

虽然...如果我把print "value to variable y is $y\n";最后一行,如下图,那么返回没有预期的结果:

use strict;
use warnings;
use Math::BigInt;

my $k = '1329227995784915872903807060280344577'; 
my $x = Math::BigInt->new($k);

my $y = $x->badd(1);


my $u = $y->bsub(1);

my $z = $u->bmuladd(2,-1);

print "value to variable y is $y\n";

print "value to variable z $z\n";

标签: perloperatorsbigint

解决方案


推荐阅读