Perl如何存储/处理非常大的数字?是否应该使用模块代替Perl的默认处理方法?

Ste*_* P. 3 perl

我需要添加50位数字,所以我将它们作为"字符串"处理,并编写我自己的函数将它们加在一起.后来,为了它的地狱,我尝试了这个:

readFile(shift (@ARGV));

sub readFile
{
    my $file = shift; #contains a bunch of 50-digit numbers
    my $result = 0;

    open (my $inFile, $file);

    while (<$inFile>)
    {
        chomp;
        $result += $_;
    }

    print $result;
}   
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是它奏效了.我不明白.在我曾经使用过的其他语言中,你必须使用某种特殊变量才能做到这一点.Perl会自动检测到您有一个非常大的数字并相应地处理它吗?如果是这样,如果提前知道他们将要处理非常大的数字,那么Perl模块是否比Perl处理它们更有效率?

提前致谢.

rua*_*akh 10

Perl会正确处理它们,但是作为双精度浮点值,所以你的结果不会有任何接近50位数的精度.您可以使用bigint编译得到透明的大整数处理,但是:刚钉use bigint;到你的代码.(这显然不会像浮点数学一样好,但它不得不自己操纵字符串.)

  • 比使用bigint更好的是使用`使用Math :: BigInt将其效果集中在需要它的变量上; 我的$ bigvar = Math :: BigInt-> new("12345 ... 789");`(然后$ bigvar上的所有操作都被重载以保持其重要性) (3认同)