【问题标题】:Convert Hexadecimal Floating-Point Constant转换十六进制浮点常数
【发布时间】:2014-05-23 10:29:45
【问题描述】:

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

0x1.0p-126f

0x1.fffffep127f

0x1.0p-23f

我怎样才能准确地转换它们?

顺便说一句,这是因为 Visual Studio 不支持这种表示法!!

【问题讨论】:

    标签: floating-point


    【解决方案1】:

    在非 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时,我从点后移到点前的每个数字都写了24倍的数量,应该补偿使用第二个参数。

    函数ldexp()是标准的:

    概要

     #include <math.h>
    
     double
     ldexp(double x, int n);
    

    描述

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

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

    【讨论】:

      猜你喜欢
      • 2014-03-01
      • 1970-01-01
      • 2011-12-05
      • 1970-01-01
      • 2010-12-08
      • 1970-01-01
      • 2016-06-02
      • 1970-01-01
      相关资源
      最近更新 更多