以下abs函数有时会返回-0 (减零)
inline float abs(float a){
return( a>=0.0f? a :-a);
}
Run Code Online (Sandbox Code Playgroud)
更具体地说,该语句 sprintf(str, "%.2f", abs(-0.00f) );产生"-0.00",这很烦人,因为字符串显示给用户.
题:
1)为什么会产生-0?
2)如何解决?
PS:我正在使用xcode(目标)c编译器.
R..*_*R.. 12
因为-0.0 == 0.0这-0.0 >= 0.0是真的.
使用fabs(或fabsf代替浮动double而不是尝试重新发明它).
-0 是二进制表示的产物,0 带有符号位集。如果您想了解更多详细信息,维基百科有一篇关于签名零的综合文章。
正如上面人们所说,使用 fabs() 。如果你真的真的想要内联,请链接你的比较:
内联浮点abs(float a) { return (a > 0.f) ? a : ( (a < 0.f) ? -a : 0); }