Somebody should just fix the bad floating point implementation / standard. Having -1.2 * 0 be -0 rather seriously misses the point of "negative zero" and brings it into play in places where it has no business and is just a royal pain with no benefit.
If you want to detect the sign of your underflow, you should bother to check before multiplying by a negative value or you should get a floating point implementation that distinguishes "zero" from "positive zero" (but most floating point implementations don't do that because "negative zero" was partly motivated by having a spare bit handy and there isn't as handy of a bit to make "positive zero" out of).
Surely we need "negative NaN" as much as "negative zero". We must distinguish +Inf * 0 from +Inf * -0, surely. At least, it makes just as much sense as having "negative zero" for one underflow case (but not having a special value for "positive underflow", much less another for "underflow of indeterminate sign").
|