numpy 为什么sin(pi/4)和cos(pi/4)在Python中不同?

qqrboqgw  于 2023-05-07  发布在  Python
关注(0)|答案(2)|浏览(181)

我想知道为什么这个声明被评估为false:

>>> from numpy import sin,cos,pi
>>> sin(pi/4)==cos(pi/4)
False

实际上π/4的正弦和余弦应该是√ 2 / 2。发生什么事了如何避免这个问题?

egmofgnx

egmofgnx1#

如果你看看结果是什么:

>>> sin(pi/4)
0.70710678118654746
>>> cos(pi/4)
0.70710678118654757

你会注意到它们非常非常接近,但并不完全相同。由于这些类型的浮点表示问题,通常使用阈值来比较应该相同的值:

>>> abs(sin(pi/4) - cos(pi/4)) < 1e-9
True

有趣的事实:也使用numpysqrt

>>> sqrt(2)/2
0.70710678118654757
>>> sqrt(2)/2 == cos(pi/4)
True
lqfhib0f

lqfhib0f2#

因为浮点表示并不总是精确的,并且像cos和sin这样的函数是通过近似的数值方法计算的,所以想象结果按位相同是不合理的。在我的机器上,我比较正弦和余弦时得到这个

>import numpy
>x=numpy.sin(numpy.pi/4)
>y=numpy.cos(numpy.pi/4)
>print numpy.abs(x-y)/numpy.max(x,y)
1.57009245868e-16

即相对误差非常接近IEEE754双精度ε。如果需要比较两个浮点值,请将增量值与容差进行比较,或使用numpy.allclose()

相关问题