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