Почему функция синуса numpy в некоторых моментах такая неточная?Python

Программы на Python
Anonymous
Почему функция синуса numpy в некоторых моментах такая неточная?

Сообщение Anonymous »

Я только что проверил функцию синуса numpy. По-видимому, это дает очень неточные результаты вокруг числа Пи.

Код: Выделить всё

In [26]: import numpy as np

In [27]: np.sin(np.pi)
Out[27]: 1.2246467991473532e-16
Ожидаемый результат — 0. Почему numpy настолько неточен?

В некоторой степени я не уверен, можно ли считать вычисленный результат неточным: его абсолютная ошибка находится в пределах одного машинного эпсилона (для двоичного кода 64), тогда как относительная ошибка равна +inf — вот почему я чувствую некоторое замешательство. Есть идеи?

[Изменить] Я полностью понимаю, что вычисления с плавающей запятой могут быть неточными. Но большинству библиотек с плавающей запятой удается выдавать результаты с небольшим диапазоном ошибок. Здесь относительная ошибка равна +inf, что кажется неприемлемым. Представьте себе, что мы хотим вычислить

Код: Выделить всё

1/(1e-16 + sin(pi))
Результаты будут катастрофически неправильными, если мы будем использовать реализацию numpy.

Вернуться в «Python»