如何确保计算结果为浮点数的表达式,使用 int(*) 给出预期的整数值

How to ensure expressions that evaluate to floats, give the expected integer value with int(*)

提问人:Alexander Soare 提问时间:12/22/2022 更新时间:12/22/2022 访问量:33

问:

在这个问题最一般的形式中,我想知道我如何保证这一点(当我知道结果是一个整数时,两个 s 都会给我算术上的“正确”答案。例如:1.5 * 2.0 = 3,或 16.0 / 2.0 = 8。我担心这可能是一个问题,因为如果存在一些浮点错误,可以向下舍入。例如:给出 .int(x * y)xyfloatintint(16.0 - 5 * sys.float_info.epsilon)15

稍微专门化一下这个问题,我还可以问两个 s 之间的除法,我知道结果是一个整数。例如,16 / 2 = 8。如果这个专业改变了更一般问题的答案,我想知道怎么做。int

顺便说一句,我知道我可以做到.我只是想知道是否有更直接的内置功能,或者是否有一些经过验证的保证,这意味着我一开始就不必担心这一点。int(round(x * y)

Python 浮点 整数

评论


答:

1赞 user2357112 12/22/2022 #1

如果两个输入都是精确的,并且数学上正确的结果是可表示的,那么输出也保证是准确的。这仅适用于有限数量的基本浮点运算,但 和 是此类运算。*/

请注意,“两个输入都是精确的”条件只满足二元有理数。像 1.5 这样的数字很好,但像 0.1 这样的数字不能用二进制浮点数精确表示。此外,浮点精度限制也适用于整数,而不仅仅是小数值 - 非常大的整数可能无法完全表示,因为需要比 Python 更高的精度。float

评论

0赞 Alexander Soare 12/22/2022
是的,听起来我对某些特定情况有保证,但总的来说,最好用它来覆盖所有基础。尽管我想这不一定涵盖所有基础,就像您给出的大量示例一样。int(round(*))