python中floor()函数的意外值

2024-05-21 02:46:04 发布

您现在位置:Python中文网/ 问答频道 /正文

import numpy
import math

x = numpy.roots([2,-2,(21 - 21**2)])
print x[0], math.floor(x[0])

输出为:

^{pr2}$

我希望

15.0 15.0

我不希望有任何理由让底限等于14.0。请解释一下!在


Tags: importnumpymathprintrootspr2floor任何理由
3条回答

{{14}看起来比cd2要小一点。求根算法是数值的而不是符号的,浮点算法不精确。在

浮点数只是某个值的近似值,所有计算都可能引入舍入误差。打印浮点数也可能将数字舍入到更少的位数。试试看

print repr(x[0]), repr(math.floor(x[0]))

以确保显示所有数字。我想它会显示类似14.9999999999999的内容。在

我以前使用过一个名为fAlmostEqual的函数,它基于numpy的allclose函数:

import math

def fAlmostEqual(a, b, rtol=1.0000000000000001e-05, atol=1e-08):
    """Checks if the given floats are almost equal. Uses the algorithm
    from numpy.allclose."""
    return math.fabs(a - b) <= (atol + rtol * math.fabs(b))

基于此创建模糊楼层函数:

^{pr2}$

打印:

15.0
15.0
14.0
14.0

相关问题 更多 >