[英]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.