转换十六进制浮点常数

时间:2014-05-23 10:29:45

标签: floating-point

我有一些常量要转换,它们被定义如下:

0x1.0p-126F

0x1.fffffep127f

0x1.0p-23F

如何准确转换它们?

BTW,这是因为Visual Studio不支持这种表示法!!

1 个答案:

答案 0 :(得分:2)

在非C99兼容编译器中,您可以编写:

0x1.0p-126f -> ldexp (1.0, -126) 

0x1.fffffep127f -> ldexp(0x1fffffe,  127 - 4 * 6)

0x1.0p-23f -> ldexp(1.0, -23)

在第二个示例中,6是点后面的十六进制数字。原文有0x1.fffffe所以当我写整数0x1fffffe时,我写了一个数量2 4 倍的每个数字,我从点之后转移到点之前,应该用第二个论点来补偿。

函数ldexp()是标准的:

  

概要

 #include <math.h>

 double
 ldexp(double x, int n);
     

说明

 The ldexp() functions multiply x by 2 to the power n.

如果这些表达式出现在需要常量表达式的位置,则函数调用不是可接受的替代。 在这种情况下,只需使用C程序和格式ldexp()打印%.16e调用的结果,然后使用打印值替换原始值。