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

前端之家收集整理的这篇文章主要介绍了c – 将double常量定义为十六进制?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想将1.0以下最接近的数字作为浮点数.通过阅读维基百科在 IEEE-754文章,我已经设法发现1.0的二进制表示是3FF0000000000000,所以最接近的double值实际上是0x3FEFFFFFFFFFFFFF.

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

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

使用起来相当麻烦.

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

解决方法

十六进制浮点数和双重文字确实存在.
语法为0x1.(尾数)p(十进制指数)
在你的情况下,语法将是
double x = 0x1.fffffffffffffp-1

猜你在找的C&C++相关文章