How to get a -0 result in floating point calculations and distinguish it from +0 in C#?

前端 未结 5 1652
难免孤独
难免孤独 2021-01-05 17:44

The MSDN documentation mentions that double type includes negative zero. However, both -1.0 / double.PositiveInfinity and -double.Epsilon / 2

5条回答
  •  礼貌的吻别
    2021-01-05 18:38

    Negative zero is to do with the way that the number is stored in binary, not any real achievable result from a mathematical calculation.

    In floating point storage, the topmost bit is often used to denote sign. This leaves 31 bits for data (in a 32bit floating point value) so there are actually two representations for zero.

    00000000 00000000 00000000 00000000
    Or
    00000000 00000000 00000000 00000001

    Both represent zero, but one with the sign bit set to negative.

    Naturally, this would normally occur when you incremented the highest possible positive number, it would overflow back to negative zero.

    In .net however I think by default the type does overflow checks and will throw an exception rather than let you overflow, so the only way to really archive this value is by setting it directly. Also, -0 should always compare equal to +0.

    There is more about it on Wikipeida

提交回复
热议问题