为什么整数运算的结果仍然是浮点数,即使我已经添加了'使用bigint;'在我的代码?

时间:2014-04-19 02:35:20

标签: 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.52172839656925e+117
5.04345679313849e+117
1.194783842005e+186
3.584351526015e+186
6.3591141060637e+234
2.54364564242548e+235
3.9655341208057e+272
1.98276706040285e+273

1 个答案:

答案 0 :(得分:7)

bigint #CAVEATS

中记录了这一点
  

CAVEATS

     

范围

     

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 will be a bigint now
  • my $result = $a**($b+0); # $result will be a bigint