Обнаружение отрицательного 0, сохраненного как double в C ++

Я делаю некоторые математические вычисления (пытаюсь преобразовать код Matlab в C ++ , используя VS2010), и мне нужно быть в состоянии определить, получу ли я в какой-то момент отрицательный 0.

Согласно стандарту IEEE -0 / + 0 различаются только битом знака (остальные равны 0).

Я использовал следующий фрагмент кода ( сообщение ), чтобы интерпретировать мой double как беззнаковый символ

double f = -5;
    unsigned char *c = reinterpret_cast(&f);
    for(int i=(sizeof(double)-1); i>=0; i--){
        printf("%02X", c[i]);
   }

Пробуя его с 5 / -5, я получаю ожидаемый результат:

C014000000000000 (-5)
4014000000000000 (5)

Но когда я попробуйте с 0 / -0, я получаю только нули в обоих случаях. VS2010 заявляет, что они соответствуют IEEE ( msdn ), поэтому я не уверен, какую именно часть я не понимаю.

Если 0 / -0 действительно хранятся в памяти точно таким же образом, я не могу отличить их друг от друга, если мне нужно, поэтому я должен прекратить тратить свое время :) Верно?

19
задан Community 23 May 2017 в 11:58
поделиться