私のコード:
import math
import cmath
print "E^ln(-1)", cmath.exp(cmath.log(-1))
印刷されるもの:
E^ln(-1) (-1+1.2246467991473532E-16j)
印刷する内容:
-1
(参考までに、Googleは私の計算をチェックしています)
python.org のドキュメントに よると、 cmath.exp(x)
e^(x) がcmath.log(x)
返され、ln (x) が返されるため、セミコロンなどがない限り、これは非常に単純な 3 行のプログラムです。
テスト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
3 と 7 はどちらも実際には 0 に等しいが、束の中で最大の虚数部を持っているように見え、4 と 5 には実数部がまったくない。
口調ごめんなさい。非常にイライラします。