Код: Выделить всё
import math
import cmath
print "E^ln(-1)", cmath.exp(cmath.log(-1))
Код: Выделить всё
E^ln(-1) (-1+1.2246467991473532E-16j)
Код: Выделить всё
-1
Согласно документации на python.org cmath.exp (x) возвращает e^(x), а cmath.log(x) возвращает ln (x), поэтому, если я не пропустил точку с запятой или что-то в этом роде, это довольно простая трехстрочная программа. .
Когда я тестирую cmath.log(-1) возвращает πi (технически 3.141592653589793j). И это правильно. Личность Эйлера говорит, что e^(πi) = -1, однако Python говорит, что когда я повышаю e^(πi), у меня возникают какие-то безумные разговоры (в частности - 1+1.2246467991473532E-16j).
Почему Python меня ненавидит и как мне его успокоить?
Нужно ли включить библиотеку, чтобы она правильно выполняла математические операции, или я должен принести жертву ван Россуму? Возможно, это какая-то проблема с точностью с плавающей запятой?
Большая проблема, с которой я сталкиваюсь, заключается в том, что точность настолько недостаточна, что другие значения кажутся ближе к 0, чем фактическое. ноль в конечной функции (не показан), поэтому логические тесты бесполезны (т. е. if(x==0)), как и локальные минимумы и т. д...
Например, в итерации ниже:
Код: Выделить всё
X = 2 Y= (-2-1.4708141202500006E-15j)
X = 3 Y= -2.449293598294706E-15j
X = 4 Y= -2.204364238465236E-15j
X = 5 Y= -2.204364238465236E-15j
X = 6 Y= (-2-6.123233995736765E-16j)
X = 7 Y= -2.449293598294706E-15j
Извините за тон. Очень расстроен.
Подробнее здесь: https://stackoverflow.com/questions/170 ... ky-results