我正在尝试编写一段代码,在给定半径的情况下,它找到360度内每个角度的x和y坐标,我觉得所有数学运算都是正确的,并且执行正确,但是返回当我将它们与计算器中的值进行比较时会出现错误的值
import math
print (math.pi)
r = 5
angle = 0
count = 0
while angle <= 360:
angle_radians = math.radians(angle)
x_coord = math.cos(angle_radians)*r
y_coord = math.sin(angle_radians)*r
print ("Position [",x_coord,",",y_coord,"]")
angle +=1
count +=1
print(count)
答案 0 :(得分:1)
它正在产生正确的答案。看你给的例子。看起来错误的坐标是y坐标,在180度旋转时应为0:
6.123233995736766e-16
e-16
是“十倍于-16的幂”的科学表示法。因此,该数字等于.00000000000000006123233...
为什么它不返回正好为0?由于Python处理浮点的方式的特殊性。
如果不需要那么高的精度,则可以通过重写函数以使用round
来提高可读性,如下所示:
def coords_from_degree(line, angle):
a = math.radians(angle)
return (round(math.cos(a)*r, 4),
round(math.sin(a)*r, 4)
)
答案 1 :(得分:1)
您的计算器可能具有板载触发功能,或四舍五入为一定位数。正如Ben Quigley所详述的那样,您给定的值真的很小。恰好与math.sin(math.pi))
返回的值相同。
math
包通过求和一个快速收敛的序列来进行非常精确的近似。由于计算机仅存储一定数量的精度,因此它们不能精确地表示每个实数-它们只是四舍五入或截断为支持的位数-在这种情况下大概为64位。
根据您的需要,您可以接受几乎准确的答案,四舍五入到所需的位数,或者对要得到的结果比一个四分之一的部分更精确的角度进行特殊检查。