use bigintしてるのに有効数字が小さいから、なんで?と思って調べた。範囲演算子が文字列を返してるからなのかな。
範囲演算子
use bigint; for my $n (16..20) { print $n ** $n, "\n"; }
実行結果
1.84467440737096e+19 8.27240261886337e+20 3.93464080752965e+22 1.97841965566031e+24 1.048576e+26
数値のリスト
use bigint; for my $n (16,17,18,19.20) { print $n ** $n, "\n"; }
実行結果
18446744073709551616 827240261886336764177 39346408075296537575424 1978419655660313589123979 104857600000000000000000000
use bigintは数値に関わるところをoverloadするので、$nが文字列として扱われた場合は華麗にスルー?
あれあれ、でも累乗してるところは立派な数値演算ではないのだろうか。うーん、よくわからない。ラクダ本にヒントあるかな。