Выполнение математических операций с очень большими числами в Perl - PullRequest
4 голосов
/ 07 января 2011

У меня есть случай, когда некоторые значения в файле данных имеют 64-битный перенос, что делает их очень большими, например, 18446744073709551608.

Так что я должен выполнить вычитание из 2 ^ 64.Я попробовал это, используя простое

2^64 - 18446744073709551608

Но я думаю, что это число слишком велико, и я не получил фактический ответ 8. Что мне нужно сделать, чтобы выполнить это вычитание.

Ответы [ 3 ]

10 голосов
/ 07 января 2011

Проверьте прагму bignum:

use bignum;

print 2**64 - 18446744073709551608;

Это должно правильно напечатать 8.

4 голосов
/ 07 января 2011

Обратите внимание, что bignum - это просто слой, который автоматически создает все постоянные числа объектов Math :: BigFloat или Math :: BigInt.Если вы хотите использовать это только для некоторых чисел, вы можете указать use bignum; в ограниченной области, добавить no bignum; местами или явно использовать Math::BigFloat->new('your constant') (или BigInt) для создания определенных чисел и результатов любых операций, связанных сони большие.

0 голосов
/ 22 августа 2016
use bignum ;

print 2**64 - 18446744073709551608 ,"\n" ;

на языке Perl, ^ = **, mod =% удачи!

...