我试图使用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
Run Code Online (Sandbox Code Playgroud)
但是,当我测试看点是否实际上在圆周上时,我做了这个
x ** 2 + y ** 2 == 50 ** 2
Run Code Online (Sandbox Code Playgroud)
但我明白了
False
Run Code Online (Sandbox Code Playgroud)
为什么是这样?
这是浮点不精确的结果.一般来说,比较两个浮点数是否相等是一个坏主意,你应该测试它们是否在一定数量的彼此之内.例如,
epsilon = 0.000001
print abs(x ** 2 + y ** 2 - 50 ** 2) <= epsilson
Run Code Online (Sandbox Code Playgroud)
另请参见:我应该如何进行浮点比较?