簡體   English   中英

整數除以小數的結果是什么?

[英]What is a result of Integer division a decimal?

我不確定整數除法實際上如何與十進制一起使用。 考慮Python 3.x上的這兩個示例:

4/0.4 = 10.0
4//0.4 = 9.0

常規除法給出 10,但 4 除以 0.4 的整數除法結果為 9.0。

你知道整數與十進制除法的行為以及為什么結果是這樣的嗎?

CPython對浮點數的floor除法的實現,無論是被除數還是除數,都在於float_floor_div函數,它調用float_divmod函數(實現divmod函數)進行實際計算,其中,有以下幾行代碼:

mod = fmod(vx, wx);
div = (vx - mod) / wx;
...
floordiv = floor(div);

告訴你,floor 除法對浮點數的工作方式是首先調用fmod函數來獲得除法的余數,從被除數vx減去余數,然后除以除數wx ,然后再應用floor函數在所得商div

如果您嘗試執行4 % 0.4的模運算,則期望它為0因為 4 / 0.4 在數學上應該是 10:

>>> 4 % 0.4
0.3999999999999998

您將看到二進制系統近似十進制數的方式固有的經典浮動錯誤 結果 0.4 實際上存儲為稍大於 0.4 的值,您可以通過使用 0.4 實例化高精度Decimal對象來驗證:

>>> from decimal import Decimal
>>> Decimal(0.4)
Decimal('0.40000000000000002220446049250313080847263336181640625')

這就是為什么 4 % 0.4 的余數是 0.3999999999999998 而不是 0,因此,按照float_divmod計算商的方式,首先從被除數中減去余數,您得到:

>>> 4 - 4 % 0.4
3.6

那么自然,

>>> (4 - 4 % 0.4) / 0.4
9.0

暫無
暫無

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

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