Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 为什么即使我添加了';使用bigint';在我的代码里?_Perl - Fatal编程技术网

Perl 为什么即使我添加了';使用bigint';在我的代码里?

Perl 为什么即使我添加了';使用bigint';在我的代码里?,perl,Perl,我想将大整数转换成字符串,但结果的格式似乎不正确 不符合我的要求 代码如下: #!/usr/bin/perl use strict; use warnings; use 5.014; use bigint; open my $fh,">","S.txt" or die "$!"; for my $a(2..5) { for my $b(390..391) { say $fh $a**$b; } } close $fh; 结果: 2.5217283

我想将大整数转换成字符串,但结果的格式似乎不正确 不符合我的要求

代码如下:

#!/usr/bin/perl
use strict;
use warnings;
use 5.014;
use bigint;

open my $fh,">","S.txt" or die "$!";
for my $a(2..5)
{
    for my $b(390..391)
    {
        say $fh $a**$b;
    }
}
close $fh;
结果:

2.52172839656925e+117
5.04345679313849e+117
1.194783842005e+186
3.584351526015e+186
6.3591141060637e+234
2.54364564242548e+235
3.9655341208057e+272
1.98276706040285e+273
这记录在

警告

范围

Perl不允许范围重载,因此您既不能安全地将范围与bigint端点一起使用,也不能将迭代器变量设置为bigint

不过,以下措施将起作用:

for my $a (2,3,4,5)
{
    for my $b (390,391)
    {
        say "$a**$b = " . $a**$b;
    }
}
产出:

2**390 = 2521728396569246669585858566409191283525103313309788586748690777871726193375821479130513040312634601011624191379636224
2**391 = 5043456793138493339171717132818382567050206626619577173497381555743452386751642958261026080625269202023248382759272448
3**390 = 1194783842005001366872669673930715104684379915202413516958309593884097707862672257897327618239887790786549346048626664496721871548575328400043101228717425477619608889629973635327326175449
3**391 = 3584351526015004100618009021792145314053139745607240550874928781652293123588016773691982854719663372359648038145879993490165614645725985200129303686152276432858826668889920905981978526347
4**390 = 6359114106063703798370219984742410466332205126109989319225557147754704702203399726411277962562135973685197744935448875852478791860694279747355800678568677946181447581781401213133886609947027230004277244697462656003657100713230572978176
4**391 = 25436456424254815193480879938969641865328820504439957276902228591018818808813598905645111850248543894740790979741795503409915167442777118989423202714274711784725790327125604852535546439788108920017108978789850624014628402852922291912704
5**390 = 396553412080570191136566336848522429191190445265796184625946925193668234045203042801938660789966294723385092352773577476031573647256816672309485368386903090381049453083702354200415440729413094818898879246996986101778562064648086409913985139752412578673101961612701416015625
5**391 = 1982767060402850955682831684242612145955952226328980923129734625968341170226015214009693303949831473616925461763867887380157868236284083361547426841934515451905247265418511771002077203647065474094494396234984930508892810323240432049569925698762062893365509808063507080078125
附录

如果使用常量对范围迭代器执行数学运算,还可以强制它们成为
bigint
。以下任一示例都适用:

  • $a+=0;#$a现在将成为bigint
  • my$result=$a**($b+0);#$结果将是一个bigint

您还可以将0添加到$a或$b,以将其转换为bigint。ie
说$a**($b+0)
@Timbus,不那么神奇:
for(390..391){my$b=Math::BigInt->new($);…}