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