我正在将一个脚本从 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++ 中获得相同的不稳定结果