簡體   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