スクリプトを matlab から C++ 関数にコピーしています。ただし、 exp 関数の結果は常に異なります。たとえば、次のスニペット:
std::complex<double> final_b = std::exp(std::complex<double>(0, 1 * pi));
MATLAB コードと同等である必要があります
final_b = exp(1i * pi);
しかし、そうではありません。MATLAB では -1 + 0i (これは正しい) を受け取り、C++ では -1 + -2.068231e-013*i を受け取ります。
最初はこれは一種の丸め誤差だと思っていましたが、私が使用している実際のスクリプトでは、より大きな複雑な指数関数を使用しているため、まったく異なる数値が得られます。これの原因は何ですか?これを修正するにはどうすればよいですか?
編集:オイラー式で指数関数を手動で計算しようとしました
exp(x+iy) = exp(x) * (cos(y) + i*sin(y))
C ++で同じ不安定な結果を得る