Unittest (иногда) не работает из-за неточности с плавающей запятой

У меня есть класс Vector , который представляет точку в трехмерном пространстве. Этот вектор имеет метод normalize (self, length = 1) , который масштабирует вектор вниз / вверх до length == vec.normalize (length) .length .

Модульное тестирование для этого метода иногда дает сбой из-за неточности чисел с плавающей запятой. У меня вопрос: как я могу убедиться, что этот тест не завершился неудачно, если методы реализованы правильно? Можно ли сделать это без тестирования приблизительного значения?



Дополнительная информация :

    def testNormalize(self):
        vec = Vector(random.random(), random.random(), random.random())
        self.assertEqual(vec.normalize(5).length, 5)

Это иногда приводит либо к AssertionError: 4.999999999999999! = 5 или AssertionError: 5.000000000000001! = 5 .

Примечание : мне известно, что проблема с плавающей точкой может быть в свойстве Vector.length или в Vector.normalize () .

60
задан Niklas R 19 January 2012 в 15:49
поделиться