我正在进行一些数学计算(试图将Matlab代码转换为C++,使用VS2010),我需要能够判断在某一点上是否得到了负零。
根据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确实以完全相同的方式存储在内存中,那么如果我需要区分它们,我就无法区分它们,所以我应该停止浪费时间,对吗?