3
我对perl中64位整数的内部表示感到困惑。perl下64位整数
Ubuntu的12.04,PERL 5.16.0:
print 18440000000000001000 . "\n";
print 18450000000000001000 . "\n";
print -9220000000000001000 . "\n";
print -9230000000000001000 . "\n";
输出:
18440000000000001000
1.845e+19
-9220000000000001000
-9.23e+18
显然正数溢出和被强制为浮子,随着精度相应的损耗,在2^64。然而 - 这不会留下任何符号位的空间,那么如何表示负数达到-2^63?
对不熟悉perl内部构件的人稍作翻译:64位perl上的数字标量可以是带符号的*或*无符号的64位int,perl将在它们之间进行转换,做出正确的选择很多时候。这意味着您可以轻松处理-2^63和+ 2^64之间的数字,超出此范围的结果是“仅”,您将降级到浮点数。 – hobbs
“64位perl”在64位系统上包含大多数perls,而在32位系统上使用“ivsize = 8”而不是“ivsize = 4”。在这些perls中,'IV's是有符号的32位,'UV'是无符号的32位,但是双精度浮点为'NV'提供了+/- 2^53的整数精度。 – hobbs