うまいぼうぶろぐ

linuxとhttpdとperlのメモ

perlで標準より大きい有効数字の整数、小数を扱う

$ perl -le 'print 2 ** 100'
1.26765060022823e+30

整数

bigint or bignumプラグマ

Math::BigIntのwrapper。

use bigint;
print 2 ** 100, "\n";
# => 1267650600228229401496703205376
Math::BigIntモジュール
use Math::BigInt;
print 2 ** 100, "\n";
# => 1.26765060022823e+30
print Math::BigInt->new(2)->bpow(100), "\n";
# => 1267650600228229401496703205376

小数

$ perl -le 'print 1 / 3'
0.333333333333333
bignumプラグマ
use bignum;
print 1 / 3, "\n";
# => 0.3333333333333333333333333333333333333333
Math::Bigfloatモジュール
use Math::BigFloat;
print Math::BigFloat->new(1)->bdiv(3), "\n";
# => 0.33333333333333333333333333333333333333331