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