矢量添加不正常

时间:2015-11-17 04:01:15

标签: python floating-point

我在python中创建了一个用于向量和向量加法的类;但是,它似乎没有产生我预期的结果。

方向为pi(弧度)或180(度)的矢量,幅度为1加上一个矢量,方向为pi * 2(弧度)或0/360(度),幅度为1 (0,0)的向量,对吗?但是,我从代码中得到了奇怪的结果。

  

( - 1.5707963267948966,1.2246467991473532e-16)

这是我从上述矢量添加中得到的结果。

这是我的代码:

import math

class Vector:
    def __init__(self, direction, magnitude, directionType="degrees"):
        if directionType=="degrees":
            direction = math.radians(direction)
        self.direction = direction
        self.magnitude = magnitude

    def __add__(self, other):
        x = (math.sin(self.direction) * self.magnitude) + (math.sin(other.direction) * other.magnitude)
        y = (math.cos(self.direction) * self.magnitude) + (math.cos(other.direction) * other.magnitude)
        magnitude = math.hypot(x, y)
        direction = 0.5 * math.pi - math.atan2(y, x)
        return (direction, magnitude)



v1 = Vector(math.pi, 1, directionType="radians")
v2 = Vector(math.pi*2, 1, directionType="radians")

print v1+v2

2 个答案:

答案 0 :(得分:2)

1.22e-16是一个非常小的数字。如果您不喜欢看到它,请将您的数字四舍五入到合理的精度,它将为零。我不希望角度是可预测的,在这种情况下它似乎是pi / 2。舍入到10位小数的示例:

angle, magnitude= v1+v2
magnitude = round(magnitude, 10)
result = (angle, magnitude)
print(result)

答案 1 :(得分:-1)

它看起来工作正常。请参阅What Every Computer Scientist Should Know About Floating Point Arithmetic

我以为在某处发布了它的摘要版本,但我找不到它。