【问题标题】:Floats, doubles and half floats浮点数、双精度数和半浮点数
【发布时间】:2010-02-15 22:57:41
【问题描述】:

我想知道浮点数(4 字节)、双精度浮点数(8 字节)和半浮点数(2 字节,用于 OpenGL 实现)上的位是如何组织的。

此外,我如何从一种转换为另一种?

【问题讨论】:

    标签: opengl floating-point double


    【解决方案1】:

    实质上,对于这些格式中的每一种,您都有:

    • 1 个符号位
    • x 个指数位产生一个整数 E
    • y 尾数(或“有效数”)位产生小数 M

    如果符号位为1,则为负数,否则为正数。

    要获得幅度,您需要 (1 + M) * 2^(E - k),其中 k(称为“指数偏差”)取决于格式。

    值得注意的是,符号、指数和尾数的某些组合是“特殊”值,例如 0、-inf+infNaN

    有关详细信息(x、y 和 k 的值),请参阅维基百科的 single precision(4 个字节)、double precision(8 个字节)和 half precision(2 个字节)。

    请注意,这些都是由IEEE 754 指定的,因此使用谷歌搜索可能会给您带来有用的结果。 :)

    【讨论】:

    • GPU 可能不完全符合 IEEE 754(例如,它们经常忽略对非规范化的支持)
    【解决方案2】:

    HalfSingleDouble

    这些页面上的实用图表。该库应提供在各种格式之间进行转换的方法。

    【讨论】:

      猜你喜欢
      • 2020-02-03
      • 2018-02-23
      • 1970-01-01
      • 2010-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-10
      • 1970-01-01
      相关资源
      最近更新 更多