2017-07-17 70 views
2

我想在使用Python的圆的圆周上生成一个随机点。使用Python测试一个随机点是否属于一个圆的圆周

我有一个中心(0,0)和半径为50的圆。我做了以下操作。

import numpy as np 
angle = 2 * np.pi * np.random.rand() 
x = np.cos(angle) * 50 
y = np.sin(angle) * 50 

但是当我测试一下,看看如果该点实际上是对圈围,我这样做

x ** 2 + y ** 2 == 50 ** 2 

,但我得到

False 

这是为什么?

+2

的[浮点不精确的例子]可能的复制(https://stackoverflow.com/questions/2100490/floating-point-inaccuracy-examples) – kay

+1

如果您想学习如何估算所需的epsilon,然后谷歌“数值稳定浮点数学”。唉,它的维基百科文章是可怕的。 – kay

回答

6

这是浮点不精确的结果。一般来说,比较两个花车的平等性是一个不好的主意,你应该测试一下,看看它们是否在一定的范围内。例如,

epsilon = 0.000001 
print abs(x ** 2 + y ** 2 - 50 ** 2) <= epsilson 

参见:How should I do floating point comparison?

3

浮点算术并不精确,因此测试相等性不会像预期的那样具有无限精度。

相关问题