c++ - 检测在 C++ 中存储为 double 的负 0

标签 c++ double ieee-754

我正在做一些数学计算(尝试使用 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]);
   }

用 5/-5 试试,我得到了预期的结果:

C014000000000000 (-5)
4014000000000000 (5)

但是当我尝试使用 0/-0 时,在这两种情况下我都只得到零。 VS2010 声明它们符合 IEEE (msdn),所以我不确定我没有得到它的哪一部分。

如果 0/-0 确实以完全相同的方式存储在内存中,如果需要,我无法区分它们,所以我应该停止浪费我的时间 :) 对吗?

最佳答案

如果你写

double d = -0; 

会发生以下情况:

首先,-0 将被计算,它是 int 类型,因为 0 是 int 类型。结果将为 0。然后 0 将被转换为 double 并赋值为 +0.0,而不是 -0.0

double d = -0.0; // is your solution.

关于c++ - 检测在 C++ 中存储为 double 的负 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5516715/

相关文章:

c++ - 在派生类中使用模板基类模板构造函数

c++ - 调整图像类型 "Mat"opencv C++

c++ - SQLite 注册 VFS 导致段错误

在 C 中从对数转换为线性并取平均值

java - 如何从 ArrayList<String> 转换为 double[]?

将变量用户输入 float 转换为 C 中的字符数组?

c++ - C++ 中的 long double 是 IEEE 的 binary128 的实现吗?

c++ - const_iterator 到迭代器 C++ 错误

c++ - 与 matlab 相比,获得正确的三角函数值

c++ - 打印最大的单精度 float