rav*_*avi 0 c c++ floating-point performance
嗨,我有一个函数定义为
int compareAB(float A, float B)
{
if(A > B)
{
return 1;
}
else if(A < B)
{
return -1;
}
else
{
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
从性能工具中可以看出,上述功能在我的项目中进行比较花费了太多时间。我可以改善它的运行时间吗?
我认为的一种方法是取 2 个数字的差,然后将其与零进行比较。
谢谢,
编辑:此函数用于排序比较函数以维护搜索树数据结构。现在也更正了返回值。
这看起来像是试图规避“不应该比较浮点数相等”规则的人为方式。比较不等式与比较等式没有太大区别,因为您在两种情况下都隐含地依赖于浮点精度。您最后的“else”语句是隐含的 A == B。
正常的习惯用法是if (::fabs(A - B) < e)
e 是一些容忍度,尽管在您的情况下您不需要::fabs
.
如果您想要正、负和相等的不同结果(在计算精度的范围内),请执行以下操作
if (A - B > e){
return 0;
} else if (A - B < -e){
return 1;
} else {
return -1;
}
Run Code Online (Sandbox Code Playgroud)
最好的情况是将 e 设置为std::numeric_limits<double>::epsilon()
。实际值取决于为到达 A 和 B 所执行的计算步骤数。1e-08 可能是现实的。
至于速度,不幸的是:我看不出这是瓶颈或运行得更快。