Выполнение следующего кода (с использованием модуля unittest Python) показывает, что они дают разные результаты (даже после многократного тестирования):
Код: Выделить всё
random_sample = np.random.normal(0, 1, 100)
std = np.var(random_sample, dtype=np.longdouble)
mean = np.mean(random_sample, dtype=np.longdouble)
welford = Welford()
welford.add_all(random_sample)
self.assertAlmostEqual(mean, welford.mean)
self.assertAlmostEqual(var, welford.var_s)
>> AssertionError: 1.1782075496578717837 != 1.1901086360180526 within 7 places (0.011901086360180828804 difference)
Для моих целей разница в 0,012 достаточно значительна, чтобы ее можно было влияют на мои результаты.
Почему такая разница? Может ли это быть связано с накоплением ошибок с плавающей запятой? Если да, то лучше всего переписать пакет, чтобы использовать класс Decimal?
Подробнее здесь: https://stackoverflow.com/questions/783 ... y-variance