簡體   English   中英

Python 大數(浮點數和整數)

[英]Python large numbers (float and integer)

我試圖理解以下計算結果。 Out[1]Out[2]Out[3]似乎與浮點數的精度限制有關,而Out[4]可能是由於int的數字沒有限制。 正確的? 我想知道是否有人可以更詳細地解釋它們。

In [1]: 2.0**52 == 2.0**52 + 1.0
Out[1]: False

In [2]: 2.0**53 == 2.0**53 + 1.0
Out[2]: True

In [3]: 2**53 == 2**53 + 1.0
Out[3]: True

In [4]: 2**53 == 2**53 + 1
Out[4]: False

要理解為什么會出現這種情況,我們必須首先了解 int 和 float 的限制。

整型和浮點型:

整數具有無限精度。 C中浮點數通常使用double實現;

pow() function:

對於 int 操作數,結果與操作數具有相同的類型(在強制轉換之后),除非第二個參數是負數;

double 通常占用 64 位,尾數為 52 位。 因此,您可以在不損失精度的情況下存儲的最大 integer 是 2⁵³。 (可以存儲超過此限制的整數,但會丟失精度並四舍五入為另一個 integer。)請參閱以獲取更多信息。

Out[1] : 2.0**52是一個浮點數,它也可以存儲它的確切值,因此它返回False

Out[2]2.0**53是一個浮點數,但2.0**53 + 1.0太大而無法處理,因此它被四舍五入到最接近的 2 次方(即2.0**53 )。 因此,它返回True

Out[3] : 2**53是一個 int(因為 pow function 的工作原理),但是1.0是一個浮點數,所以當這兩個相加時,int 被轉換為一個浮點數。 就像上面一樣,它變圓了。 這就是為什么當比較 2 時,它也返回True

Out[4] : 2**531是整數,由於它們具有無限精度,因此添加的 1 不會四舍五入,因此返回False

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM