我正在做一些数学计算(尝试使用VS2010将Matlab代码转换为C++),我需要能够判断在某些时候我得到负0.
根据IEEE标准-0/+ 0仅在符号位上有所不同(其余为0).
我使用下面的代码(post)将我的double解释为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]);
}
Run Code Online (Sandbox Code Playgroud)
尝试用5/-5我得到预期的结果:
C014000000000000 (-5)
4014000000000000 (5)
Run Code Online (Sandbox Code Playgroud)
但是当我用0/-0尝试它时,我在这两种情况下都只得到零.VS2010声称它们符合IEEE标准(msdn),所以我不确定它的哪一部分我没有得到.
如果0/-0确实以完全相同的方式存储在内存中,我无法分辨它是否需要,所以我应该停止浪费时间:)对吗?