c++ - 将双常量定义为十六进制?

标签 c++ floating-point floating-accuracy ieee-754 notation

我希望将最接近 1.0 的数字作为 float 。通过阅读维基百科关于 IEEE-754 的文章我设法发现 1.0 的二进制表示形式是 3FF0000000000000,因此最接近的 double 值实际上是 0x3FEFFFFFFFFFFFFFF

我知道用这个二进制数据初始化 double 的唯一方法是:

double a;
*((unsigned*)(&a) + 1) = 0x3FEFFFFF;
*((unsigned*)(&a) + 0) = 0xFFFFFFFF;

使用起来比较麻烦。

如果可能的话,是否有更好的方法来定义这个双数?

最佳答案

十六进制 float 和 double 文字确实存在。 语法为 0x1.(尾数)p(十进制指数) 在你的情况下,语法是

double x = 0x1.fffffffffffffp-1

关于c++ - 将双常量定义为十六进制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3947159/

相关文章:

c++ - 将标准输出重定向到 LCD : pointer of member class

c++ - 赋值运算符重载有类似的转换(仅在 VS 中)

将 float 1864.78 转换为二进制和 IEEE 格式

python - 表示 [0, 255] 范围内的值所需的最小小数位数

math - float 学坏了吗?

c++ - 使用基类指针确定子类的类型

c++ - 为什么要转换为 void 指针?

ScalaTest - 检查 "almost equal"是否有 float 和包含 float 的对象

objective-c - Objective-C . 将 int 转换为 float

c++ - 在 C 中比较相同的浮点值