numpy.sin(pi) returns negative value

被刻印的时光 ゝ 提交于 2019-11-29 11:38:12

This because of floating point arithmetic, and accuracy reasons. The result is the best approximation of sin one can get to be representable as a floating point number. Usually you solve near-zero problems like this:

a = numpy.sin(2. * numpy.pi)
print(abs(a) < 1e-10)

You may also want to read this.

In reality a <> 0 because in reality numpy.pi is not Pi (what is Pi in reality anyway?) - it is just its approximation and numpy.sin is not sine - it is its approximation as well. So you have to take some error into account, for example

print( -0.0000001 < a < 0.0000001 )

or use some other tricks (representing Pi differently - not as a float number ).

>>> import numpy
>>> a = numpy.sin(2. * numpy.pi)
>>> numpy.allclose(a, 0)
True
>>> numpy.clip(numpy.array([-0.1, 1.0, 2.0]), 0, np.inf)
array([ 0.,  1.,  2.])

When I calculate

numpy.sin(2 * numpy.pi)

I get

-2.4492935982947064e-16 # i.e. -0.0000000000000002

This is a classic floating point accuracy error. You are better taking a tolerance approach to testing the value:

if abs(a) < 0.0001:
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!