【问题标题】:Defining floating point values by base and exponent explicitly通过基数和指数显式定义浮点值
【发布时间】:2013-02-06 12:18:20
【问题描述】:

我偶然发现了http://sourceware.org/ml/glibc-cvs/2013-q1/msg00115.html,其中包括一行

#define  TWO5      0x1.0p5      /* 2^5     */

显然,TWO5 被定义为具有显式值1<<5 的双精度数。但是,这是我第一次看到这种符号。这种格式是如何使用的,与只写2.5相比有什么优势?

【问题讨论】:

  • C99 十六进制浮点常数。
  • 相关:link.

标签: c floating-point notation


【解决方案1】:

这种表示法是在 C99 中引入的。优点是该值以十六进制形式表示,因此不会在基础表示形式和十进制形式之间转换浮点值时发生舍入等。

有很多页面描述了这种表示法,例如:

http://www.exploringbinary.com/hexadecimal-floating-point-constants/

【讨论】:

    【解决方案2】:

    这是 C99 附带的十六进制浮点表示法(我认为)。优点是它允许用它们精确的可表示值来指定这些常量。 (这假设浮点基数是 2、4、8 或 16 :)

    【讨论】:

      【解决方案3】:

      这是十六进制浮点常量的语法,定义在C99 draft,写成正则表达式:

      0[xX]([a-fA-F0-9]*[.][a-fA-F0-9]+|[a-fA-F0-9]+[.]?)[pP][+-]?[0-9]+[flFL]?
      

      由4部分组成:

      • 0[xX]:十六进制前缀,这2个:

        0x 0X
      • ([a-fA-F0-9]*[.][a-fA-F0-9]+|[a-fA-F0-9]+[.]?):十六进制小数常数,例如:

        34.2f .de b3。

        或十六进制数字序列(十六进制整数),例如:

        2f4 10

        第二部分基本描述了尾数。

      • [pP][+-]?[0-9]+:二进制指数部分(以十进制指定),例如:

        p-4 p20

        我们通过指定十六进制的尾数和十进制的指数 b(以 2 为底)来指定十六进制浮点常数。

      • [flFL]?:可选浮动后缀,表示类型(floatdoublelong double)。

      【讨论】:

        猜你喜欢
        • 2020-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-17
        • 1970-01-01
        • 2021-11-02
        • 2015-03-23
        • 2010-12-10
        相关资源
        最近更新 更多