小编典典

单精度和双精度浮点运算有什么区别?

all

单精度浮点运算和双精度浮点运算有什么区别?

我对与视频游戏机相关的实用术语特别感兴趣。例如,Nintendo 64 是否有 64 位处理器,如果有,那是否意味着它能够进行双精度浮点运算?PS3 和
Xbox 360 可以执行双精度浮点运算还是仅执行单精度运算,并且通常使用的是双精度功能(如果存在的话?)。


阅读 381

收藏
2022-07-28

共1个答案

小编典典

注意:Nintendo 64确实有一个 64 位处理器,但是:

许多游戏都利用了芯片的 32 位处理模式,因为 3D 游戏通常不需要 64 位数据类型提供的更高数据精度,而且处理 64 位数据使用两倍的
RAM、缓存和带宽,从而降低整体系统性能。

来自网络百科

术语双精度有点用词不当,因为精度并不是真正的双精度。
double 这个词源于一个事实,即双精度数使用的位数是常规浮点数的两倍。
例如,如果一个单精度数需要 32 位,那么它的双精度数将是 64 位长。

额外的位不仅增加了精度,还增加了可以表示的幅度范围。
增加精度和幅度范围的确切数量取决于程序用于表示浮点值的格式。
大多数计算机使用称为 IEEE 浮点格式的标准格式。

IEEE 双精度格式的精度实际上是单精度格式的 两倍 多,范围也更大。

来自IEEE
浮点运算标准

单精度

IEEE 单精度浮点标准表示需要一个 32 位字,它可以表示为从左到右从 0 到 31 的编号。

  • 第一位是 符号 位,S,
  • 接下来的八位是 指数 位,’E’,和
  • 最后 23 位是 分数 “F”:
    S EEEEEEEE FFFFFFFFFFFFFFFFFFFFFFF
    

    0 1 8 9 31

单词表示的值V可以如下确定:

  • 如果 E=255 且 F 非零,则 V=NaN(“非数字”)
  • 如果 E=255 且 F 为零且 S 为 1,则 V=-Infinity
  • 如果 E=255 且 F 为零且 S 为 0,则 V=Infinity
  • 如果0<E<255then V=(-1)**S * 2 ** (E-127) * (1.F)where “1.F” 旨在表示通过在 F 前加上隐式前导 1 和二进制点而创建的二进制数。
  • 如果 E=0 且 F 不为零,则V=(-1)**S * 2 ** (-126) * (0.F). 这些是“非标准化”值。
  • 如果 E=0 且 F 为零且 S 为 1,则 V=-0
  • 如果 E=0 且 F 为零且 S 为 0,则 V=0

尤其是,

0 00000000 00000000000000000000000 = 0
1 00000000 00000000000000000000000 = -0

0 11111111 00000000000000000000000 = Infinity
1 11111111 00000000000000000000000 = -Infinity

0 11111111 00000100000000000000000 = NaN
1 11111111 00100010001001010101010 = NaN

0 10000000 00000000000000000000000 = +1 * 2**(128-127) * 1.0 = 2
0 10000001 10100000000000000000000 = +1 * 2**(129-127) * 1.101 = 6.5
1 10000001 10100000000000000000000 = -1 * 2**(129-127) * 1.101 = -6.5

0 00000001 00000000000000000000000 = +1 * 2**(1-127) * 1.0 = 2**(-126)
0 00000000 10000000000000000000000 = +1 * 2**(-126) * 0.1 = 2**(-127) 
0 00000000 00000000000000000000001 = +1 * 2**(-126) * 
                                     0.00000000000000000000001 = 
                                     2**(-149)  (Smallest positive value)

双精度

IEEE 双精度浮点标准表示需要一个 64 位字,可以表示为从左到右从 0 到 63 的编号。

  • 第一位是 符号 位,S,
  • 接下来的 11 位是 指数 位,“E”,以及
  • 最后的 52 位是 分数 “F”:
    S EEEEEEEEEEE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    

    0 1 11 12 63

单词表示的值V可以如下确定:

  • 如果 E=2047 且 F 非零,则 V=NaN(“非数字”)
  • 如果 E=2047 且 F 为零且 S 为 1,则 V=-Infinity
  • 如果 E=2047 且 F 为零且 S 为 0,则 V=Infinity
  • 如果0<E<2047then V=(-1)**S * 2 ** (E-1023) * (1.F)where “1.F” 旨在表示通过在 F 前加上隐式前导 1 和二进制点而创建的二进制数。
  • 如果 E=0 且 F 非零,则V=(-1)**S * 2 ** (-1022) * (0.F)这些是“非标准化”值。
  • 如果 E=0 且 F 为零且 S 为 1,则 V=-0
  • 如果 E=0 且 F 为零且 S 为 0,则 V=0

参考:
ANSI/IEEE 标准 754-1985,
二进制浮点算术标准。

2022-07-28