[英]When dividing a number by its divisor in floating point math, when if ever is the result not an integral float
當我在 python 中運行這段代碼時
def is_cool(n):
if (n/7).is_integer():
return True
else:
return False
for i in range(0,1000000,7):
if not is_cool(i):
print(i, " is where the error is")
它不打印任何東西。 我知道有些地方浮點數學總是正確的。 這是其中之一嗎?
IEEE-754 將一個數除以它的一個除數會返回一個精確的結果。
IEEE 754-2008 4.3 說:
...除非另有說明,每個操作都應該像首先產生一個精確到無限精度和無限范圍的中間結果一樣執行,然后根據本節中的一個屬性對該結果進行四舍五入。
當中間結果可表示時,所有舍入屬性將其舍入到自身; 舍入僅在值不可表示時更改值。 除法規則在 5.4 中給出,它們沒有說明上述例外情況。
將可表示數除以可表示除數所得的商必須是可表示的,因為它的有效位不能超過分子。 因此,將一個數除以它的一個除數會返回一個精確的結果。
請注意,此規則適用於作為除法實際操作數的數字。 當源代碼中有一些數字時,例如1234567890123456890 / 7
,這些數字首先轉換為數字格式。 如果它們不能以該格式表示,則必須產生一些近似值。 這是一個獨立於部門運作方式的問題。
(n/7).is_integer()
僅在n%7===0
時返回True
現在您從0
開始運行循環,步長為7
你的i
將是0, 7, 14, 21, ...
is_cool(i)
將始終為上述i
每個值返回True
但在您的if
條件中, if not is_cool(i)
將始終為False
因此代碼不會打印任何內容
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.