之间的区别是什么一个精密浮点运行和双精度浮动作?

我特别感兴趣的是在实际方面有关的视频游戏机。例如,没有任天堂64有64位处理器,并如果它然后将这意味着它是有能力的双精度浮点运算?可以的PS3和Xbox360拉脱双精度浮点运算或只有单一的精密度和在一般使用双精确能力使用的(如果它们存在?).

有帮助吗?

解决方案

注:的 任天堂64 不会有64位处理,但是:

许多游戏了利用芯片的32位的处理模式作为更大数据的精确可用的64位的数据类型不是通常需要通过3D游戏,以及事实上处理的64位的数据使用的两倍多RAM、缓和带宽,从而降低了整个系统的性能。

Webopedia:

术语双精度的有些用词不当,因为精密的不是真的一倍。
这个词的双重源自这样一个事实,即一个双精度数使用的两倍多位作为一个经常浮点数。
例如,如果一个单一的精度数要求的32位,其双精度对应方将64位长。

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

IEEE标准的浮点运算

单一精准

IEEE个精密浮点标准表示需要一个32位字,这可以表示作为编号为从0至31,从左到右。

  • 第一位是 标志 比特,S,
  • 下一个八位是 指数 比特,'E',和
  • 最终的23位是 分数 'F':

    S EEEEEEEE FFFFFFFFFFFFFFFFFFFFFFF
    0 1      8 9                    31
    

值V代表通过这个词可以确定如下:

  • 如果E=255和F为零,则V=南("不多")
  • 如果E=255和F是零和S1,然后V=-无穷
  • 如果E=255和F是零和S0,则V=无穷
  • 如果 0<E<255 然后 V=(-1)**S * 2 ** (E-127) * (1.F) 这里的"1.F" 意图表示的二进制数字创造的前缀的一个F 隐含的领先1和一二点。
  • 如果E=0和F为零,然后 V=(-1)**S * 2 ** (-126) * (0.F).这些 是"非标准化"的价值观。
  • 如果E=0和F是零和S1,然后V=-0
  • 如果E=0和F是零和S0,则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,
  • 在接下来的十一位的 指数 比特,'E',和
  • 最终的52位是 分数 'F':

    S EEEEEEEEEEE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    0 1        11 12                                                63
    

值V代表通过这个词可以确定如下:

  • 如果E=2047和F为零,则V=南("不多")
  • 如果E=2047和F是零和S1,然后V=-无穷
  • 如果E=2047和F是零和S0,则V=无穷
  • 如果 0<E<2047 然后 V=(-1)**S * 2 ** (E-1023) * (1.F) 这里的"1.F" 意图表示的二进制数字创造的前缀的一个F 隐含的领先1和一二点。
  • 如果E=0和F为零,然后 V=(-1)**S * 2 ** (-1022) * (0.F) 这些 是"非标准化"的价值观。
  • 如果E=0和F是零和S1,然后V=-0
  • 如果E=0和F是零和S0,则V=0

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

其他提示

我读了很多的答案,但似乎没有正确地解释的词 从何而来。我记得一个非常好的解释给出的通过一个大学教授我有一些年前。

回顾的风格VonC的回答, 精度浮点表示使用一个词的32位。

  • 1位 标志, S
  • 8比特 指数,'E'
  • 24位 分数, 也被称为 尾数, 或 系数 (即使只有23们表示)。让我们把它叫做'M'(对 尾数, 我喜欢这个名称为"分数"可能被误解).

表示:

          S  EEEEEEEE   MMMMMMMMMMMMMMMMMMMMMMM
bits:    31 30      23 22                     0

(只是要指出,标志位是最后一次,不是第一次。)

一个 精度浮点表示使用一个词的64位。

  • 1位 标志, S
  • 11位 指数,'E'
  • 53位 分数 / 尾数 / 系数 (即使只有52个代表),'M'

表示:

           S  EEEEEEEEEEE   MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
bits:     63 62         52 51                                                  0

正如你可能会注意到,我写了, 尾数 有,在这两种类型中,一点更多的信息相比,它的代表性。事实上,尾数是一个数字表示没有所有其无意义 0.例如,

  • 0.000124变0.124×10−3
  • 237.141变0.237141×103

这意味着尾数将始终是形式

0.α1α2...αt × βp

其β为基础的代表性。但是,由于分是二进制数字,α1 会总是等于1,因此该部分可以改写为1。α2α3...αt+1 × 2p 和最初的1可以隐含地假定,一个额外的位(αt+1).

现在,这显然是真的,这双32 64,但这并不是一词从何而来。

精密 表示小数位数, 正确的, 即没有任何一种表示错误的或者近似。换言之,它表明有多少小数位数的一个可能 安全 使用。

与这就是说,它很容易估计数的十进制数字,它可能安全地使用:

  • 单一精准:日志10(224),其中约有7-8个小数
  • 双精密:日志10(253),这是15-16小数位数

好的,机器的基本区别在于双精度使用的位数是单个精度的两倍。在通常的实现中,单个为32位,双为64位。

但那意味着是什么意思?如果我们假设IEEE标准,则单个精度数具有约23位的尾数,最大指数约为38;双精度的尾数为52位,最大指数约为308。

详情请参阅维基百科,照常。

在这里添加所有精彩答案

首先, float double 都用于表示数字小数。因此,两者之间的差异源于他们可以存储数字的精确度。

  

例如:我必须存储123.456789一个人可能只能存储123.4567而其他人可以存储确切的123.456789。

所以,基本上我们想知道这个数字存储的准确程度,我们称之为精确度。

在这里引用@Alessandro

  

精度表示正确的小数位数,   即没有任何表示错误或近似。在   换句话说,它表示可以安全使用的小数位数。

Float可以在小数部分准确存储大约7-8位数字 Double可以准确地存储小数部分中的大约15-16位数

因此,float可以存储小数部分的两倍。这就是为什么Double被称为双倍的浮动

关于问题<!>可以说ps3和xbxo 360是否能够实现双精度浮点运算或者只有单精度运算才能使用(如果它们存在?)使用双精度功能。 > QUOT;

我认为这两个平台都无法实现双浮点。最初的Cell处理器只有32位浮点数,与XBox 360所基于的ATI硬件相同(R600)。 Cell稍后获得了双浮点支持,但我很确定PS3不会使用该芯片。

基本上单精度浮点运算处理32位浮点数而双精度处理64位。

双精度中的位数增加了可以存储的最大值以及提高精度(即有效位数)。

双精度意味着数字需要两倍的字长才能存储。在32位处理器上,字都是32位,因此双精度是64位。这在性能方面意味着对双精度数字的操作需要更长的时间来执行。所以你获得了更好的范围,但是性能受到了很小的影响。硬件浮点单元可以缓解这种打击,但它仍然存在。

N64使用基于MIPS R4300i的NEC VR4300,它是一个64位处理器,处理器通过32位宽总线与系统的其余部分通信。因此,大多数开发人员使用32位数字因为它们更快,而且当时大多数游戏都不需要额外的精度(所以他们使用的浮点数不是双倍的)。

所有三个系统都可以执行单精度和双精度浮点运算,但由于性能原因,它们可能不会。 (尽管n64之后的所有内容都使用了32位总线,所以...)

根据IEEE754 <!>#8226;浮点存储标准 <!>#8226; 32位和64位标准(单精度和双精度) <!>#8226;分别为8位和11位指数 <!>#8226;中间结果的扩展格式(尾数和指数)

首先,float和double都用于表示数字小数。因此,两者之间的差异源于他们可以存储数字的精确度这一事实。

例如:我必须存储123.456789一个人可能只能存储123.4567而其他人可以存储确切的123.456789。

所以,基本上我们想知道数字的存储准确度是多少,我们称之为精确度。

在这里引用@Alessandro

精度表示正确的小数位数,即没有任何表示错误或近似值。换句话说,它表示可以安全使用的小数位数。

Float可以在小数部分准确存储约7-8位数字,而Double可以在小数部分准确存储约15-16位数字

因此,double可以存储浮点数的两倍小数部分。这就是Double被称为double double的原因

单精度数使用32位,MSB为符号位,而双精度数使用64位,MSB为符号位

单精度

SEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFF.(SIGN+EXPONENT+SIGNIFICAND)

双精度:

SEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF.(SIGN+EXPONENT+SIGNIFICAND)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top