繁体   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