In the two additions, which are by far the most common representation for signed integers these days, there is no such thing as negative zero. -0 == +0 in all cases, even bitwise. Thus, by the time the macro code processes it, even if it includes ((float) -0) , the sign is already gone.
If you want to test, you might be lucky with something like signbit(-0.0) or signbit(-1.0 * 0) . Since you are not converting from an integer at this moment, the number must still have a sign.
source share