C/C++:浮动比较速度

4 c c++ floating-point comparison performance

我正在检查以确保浮点数不为零.浮子不可能变为负面.那么这个float != 0.0f或者这个更快float > 0.0f吗?

谢谢.

编辑:是的,我知道这是微优化.但是每次通过我的游戏循环都会调用它,无论如何我想知道.

Gre*_*ill 8

性能不太可能存在可检测的差异.

  • 和`float> 0.0f`,或者更好的`float> EPSION`更安全. (3认同)

Ste*_*sop 5

考虑一下,仅用于娱乐目的:

只有2个浮点值比较等于0f:零和负零,它们仅在1位不同.因此,测试31个非符号位是否清晰的电路/软件仿真将会这样做.

比较>0f稍微复杂一些,因为负数和0导致错误,正数导致为真,但NaN(两个符号)也导致错误,因此它只是检查符号位.

根据浮点模式,任何一个操作都可能导致浮点寄存器中的超精确结果在比较之前被舍入到32位,因此得分甚至在那里.

如果存在差异,我会期望!=更快,但我真的不希望会有差异,我不会对某些特定实现的错误感到惊讶.

我假设您的证据表明该值不能为负值,不会出现浮点错误.例如,如果错误恰好累积而不是取消,那么沿着线的计算1/2.0 - 1/3.0 - 1/6.0或者0.4 - 0.2 - 0.2可以导致正值或负值,因此可能不会发生这种情况.关于仅实际使用与0相等的浮点测试,是测试是否已0为其分配了一个文字.或其他一些计算的结果保证有结果0float,但可以调皮.