8

Я начал изучать GNU Octave сегодня и попробовал первое выражение, данное в руководстве.

exp(i*pi)

Результат

ans = -1.0000e+000 + 1.2246e-016i

И, похоже, Научная библиотека GNU тоже дает похожие результаты.

Так это ошибка Октавы или общие проблемы программного обеспечения для числового анализа (программное обеспечение для символической оценки определенно даст точный ответ)?

1 ответ1

8

Это тоже не ошибка, но из-за того, как компьютеры выполняют операции с плавающей запятой. Точность, с которой может работать любой компьютер, ограничена, поэтому иногда вы можете увидеть подобные аномалии. Хотя можно написать программное обеспечение, способное справиться с этим, это потребовало бы гораздо больше времени на вычисления и значительно увеличило бы требования к памяти.

Если вы посмотрите на это, e ^(i * pi) вернет -1 + 1.2x10 ^ -16i. Как вы можете видеть, мнимый компонент чрезвычайно мал (большинство сочло бы его незначительным, поскольку он на 16 порядков меньше реальной части). Этот компонент вводится из-за ошибок округления и точности, как самих вычислений, так и сохраненного значения числа pi, поскольку оно нерационально (см. Эту ссылку для другого примера, связанного с иррациональными числами).

Если эта ошибка вычисления неприемлема, вам следует изучить математические пакеты, которые выполняют символический, а не числовой анализ, или пакеты, в которых используются высокоточные числа с плавающей запятой. Предостережения от них заключаются в том, что они резко увеличат ваши требования к памяти, а символьный анализ часто выполняется намного медленнее. Кроме того, числа с более высокой точностью просто уменьшат величину ошибок округления / точности, а не устранят их.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .