【发布时间】:2014-04-30 15:50:29
【问题描述】:
我正在将一个脚本从 matlab 复制到一个 c++ 函数中。但是,对于 exp 函数,我不断得到不同的结果。比如下面sn-p:
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++ 中得到同样的奇怪结果
【问题讨论】:
-
你熟悉浮点精度这个术语吗?
-
@40two 从问题的内容来看,我认为答案是肯定的。
-
只是一个想法,你检查了 pi 的精度吗?
-
不能保证 MatLab 和 C++ 以相同的方式计算
exp。因此,可以容忍小的舍入误差。请记住,在后台计算cos和sin等三角函数涉及像Newton-Raphson等迭代过程。请说明您遇到的错误量,以便我们更清楚地了解您的问题. P.S 还说明您如何打印这些值。 -
事实证明你是对的 40two。我一直在读错结果......每当 MATLAB 输出 0 时,C++ 输出的东西非常接近 0。抱歉造成混淆。
标签: c++ matlab complex-numbers exp