Я делаю некоторые математические вычисления (пытаюсь преобразовать код Matlab в C ++, используя VS2010), и мне нужно иметь возможность сказать, получаю ли я в какой-то момент отрицательный 0.
Согласно стандарту IEEE-0 / + 0 отличаются только знаковым битом (остальные 0).
Я использовал следующий фрагмент кода ( post ), чтобы интерпретировать свой дубль как беззнаковый символ
double f = -5;
unsigned char *c = reinterpret_cast<unsigned char *>(&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 действительно хранятся в памяти точно таким же образом, я никак не могу отличить их, если мне нужно, чтобы я прекратил тратить свое время :) Верно?