如何解决在浮点数学中将数字除以除数时,如果结果不是整数浮点数
当我在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()
仅在True
n%7===0
现在,您以0
的步长从7
开始运行循环
您的i
将是0,7,14,21,...
is_cool(i)
将始终为True
的每个值返回i
,但是在您的if
条件下,您已声明if not is_cool(i)
将始终为{{ 1}},因此代码将不会打印任何内容
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。