繁体   English   中英

std :: exp对于复数给出与MATLAB exp不同的结果

[英]std::exp giving different result than MATLAB exp for complex number

我正在将脚本从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。

现在我想一开始这只是种舍入误差,但是对于我使用的实际脚本(具有更大的复杂指数),我得到的数字完全不同。 这是什么原因? 我该如何解决?

编辑:我已经尝试过尝试用eulers公式计算指数

exp(x+iy) = exp(x) * (cos(y) + i*sin(y)) 

并在C ++中获得相同的结果

这称为浮点近似(或不精确度 ):

如果包含标题cfloat则有一些定义。 特别是, DBL_EPSILON ,这是最小的数字, 1.0 + DBL_EPSILON != 1.0 ,这通常是1e-9-2.068231e-013小得多。如果你这样做了下面的一段代码,就可以检查它是否为零:

// The complete formula is std::abs(a - b), but since b is zero, I am ommiting it
if (std::abs(number.imag()) < DBL_EPSILON) {
    // The number is either zero or very close to zero
}

例如,您可以在这里查看工作代码: http : //ideone.com/2OzNZm

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM