Вопрос: Почему выражение exp (i * pi) возвращает неверный результат в GNU Octave?


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

exp(i*pi)

В результате

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

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

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


7
2017-07-27 15:16


Источник


Кажется, октава является первостепенной задачей, предназначенной для численного анализа. Mathematica определенно даст вам лучший ответ ...: P просто шутит ... Попробуйте найти решение для символического анализа GNU - gd1
@Giacomo: Я знаю это. Мне просто интересно, оценивает ли все числовое аналитическое программное обеспечение такое число или просто GNU Octave. - Siyuan Ren
@ Karsus Ren это не ошибка программного обеспечения, а аппаратная. Это неотъемлемое ограничение в попытке оценить выражения с иррациональными числами на аппаратном обеспечении с ограниченным объемом памяти для одного номера. - Breakthrough
download.oracle.com/docs/cd/E19957-01/806-3568/... - James


Ответы:


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

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

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


8
2017-08-03 13:30



Мне просто нужно подтверждение того, что это общее поведение программного обеспечения для численного анализа. - Siyuan Ren
@ Karsus Ren это поведение такого программного обеспечения с достаточно высокая точность, Я знаю, что это кажется контр-интуитивным, но более низкие цифры точности не возвращают эти аномалии так часто. Видеть эта статья от Microsoft для получения дополнительной информации, но помните, что эта проблема представляет собой комбинацию как исходного кода, так и архитектуры компилятора / целевого объекта. Также, это статья в Википедии имеет некоторую хорошую справочную информацию о проблеме. - Breakthrough
Основная проблема заключается в том, что постоянная Октава piне является математической константой π, но близкое с плавающей точкой приближение к нему. exp функция добавляет еще одну небольшую ошибку. Система, которая работает с символический выражения могли вычислять exp(i*pi) в точку; Октава не такая система. - Keith Thompson