[英]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.