簡體   English   中英

如何安全地比較 std::complex<double> 零和一些精度 Epsilon? </double>

[英]How to safely compare std::complex<double> with Zero with some precision Epsilon?

我需要安全地檢查我的復數是否為零(或非常相似)。 我該如何處理浮點數?

我可以使用類似的東西:

std::complex<double> a;
if(std::abs(std::real(a)) <= std::numerical_limits<double>::epsilon() && std::abs(std::imag(a)) <= std::numerical_limits<double>::epsilon())
{
//...
}

我將值除以a並且不想得到INF作為結果。

我需要檢查我的復數是否為零。 我該如何處理浮點數?

您可以將其與值為 0 的浮點文字進行比較。您不能使用 integer 文字。 例子:

a == 0.0

我可以使用類似...

您所顯示的並沒有比較復數是否為零; 它比較復數是否接近零。

如果數字接近零,這是否是比較的好方法取決於用例。 例如, epsilon不一定是“near”的最佳閾值。 您可能會考慮的另一件事是您是否應該將std::abs(a)與閾值進行比較,而不是分別比較組件,即是否應該使用歐幾里德距離而不是曼哈頓距離。

您是否嘗試過來自<cmath>std::fpclassify

if (std::fpclassify(a.real()) == FP_ZERO) {}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM