Ask HN: How is it possible to get -0.0 in a sum?

7 gus_massa 1 8/2/2025, 1:58:43 PM
I'm looking for corner cases where he result is -0.0. As far as I know, the only way to get -0.0 in a sum is

  (-0.0) + (-0.0)
Does someone know any other case in IEEE 754?

Bonus question: What happens in subtractions? I only know

  (-0.0) - (+0.0)
Is there any other case?

Comments (1)

sparkie · 25m ago
It depends on the FP rounding mode. If rounding mode is FE_TOWARDZERO then the case you gave is the only one I'm aware of. If rounding mode is FE_DOWNWARD (towards negative infinity) then other calculations that result in a zero will give a -0.0.

Here's an example of -1.0f + 1.0f resulting in -0.0: https://godbolt.org/z/z853nWMqa

NB: If using C23 you can use:

    #include<fenv.h>

    #pragma STDC FENV_ROUND FE_DOWNWARD
  
    // or

    fesetround(FE_DOWNWARD);
Which would be more portable. I just edited the CSR directly because godbolt was complaining about undefined reference to `fesetround` even with -std=c23.