将double常量定义为十六进制?

mar*_*nus 6 c++ floating-point floating-accuracy notation ieee-754

我想将1.0以下最接近的数字作为浮点数.通过阅读维基百科上的文章IEEE-754我已经设法找出1.0二进制表示3FF0000000000000,所以最接近的双值实际上是0x3FEFFFFFFFFFFFFF.

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

double a;
*((unsigned*)(&a) + 1) = 0x3FEFFFFF;
*((unsigned*)(&a) + 0) = 0xFFFFFFFF;
Run Code Online (Sandbox Code Playgroud)

使用起来相当麻烦.

有没有更好的方法来定义这个双号,如果可能的话,作为常量?

Shu*_*hum 7

十六进制浮点数和双重文字确实存在.语法是0x1.(尾数)p(十进制的指数)在你的情况下语法是

double x = 0x1.fffffffffffffp-1
Run Code Online (Sandbox Code Playgroud)