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