Answers:
注意:Nintendo 64确实具有64位处理器,但是:
许多游戏都利用了芯片的32位处理模式,因为3D游戏通常不需要64位数据类型提供更高的数据精度,而且处理64位数据使用的RAM和缓存是原来的两倍。和带宽,从而降低整体系统性能。
来自Webopedia:
双精度一词用词不当,因为精度并不是真正的双精度。
单词double源自这样一个事实,即双精度数使用的位是常规浮点数的两倍。
例如,如果单精度数字需要32位,则其双精度对应数字将为64位长。额外的位不仅增加了精度,而且增加了可以表示的幅度范围。
提高精度和幅度范围的确切数量取决于程序使用哪种格式表示浮点值。
大多数计算机使用一种称为IEEE浮点格式的标准格式。
实际上,IEEE双精度格式具有更多的精度是单精度格式的两倍,并且范围更大。
单精度
IEEE单精度浮点标准表示需要一个32位的字,该字可以表示为从左到右从0到31的编号。
最后的23位是分数 'F':
S EEEEEEEE FFFFFFFFFFFFFFFFFFFFFFF
0 1 8 9 31
单词表示的值V可以确定如下:
0<E<255
话V=(-1)**S * 2 ** (E-127) * (1.F)
“ 1.F”旨在表示通过在F前面加上隐式前导1和二进制点而创建的二进制数。V=(-1)**S * 2 ** (-126) * (0.F)
。这些是“非标准化”值。特别是,
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从左到右编号。
最后的52位是分数 'F':
S EEEEEEEEEEE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
0 1 11 12 63
单词表示的值V可以确定如下:
0<E<2047
话V=(-1)**S * 2 ** (E-1023) * (1.F)
“ 1.F”旨在表示通过在F前面加上隐式前导1和二进制点而创建的二进制数。V=(-1)**S * 2 ** (-1022) * (0.F)
这些为“未归一化”的值。参考:
ANSI / IEEE标准754-1985,
二进制浮点算法的标准。
我读了很多答案,但似乎没有一个能正确解释double这个词的来源。我记得几年前一位大学教授给出的很好的解释。
回顾VonC的回答风格,单精度浮点表示使用32位字。
表示:
S EEEEEEEE MMMMMMMMMMMMMMMMMMMMMMM
bits: 31 30 23 22 0
(只需指出,符号位是最后一个,而不是第一个。)
甲双精度浮点表示使用64位的一个字。
表示:
S EEEEEEEEEEE MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
bits: 63 62 52 51 0
您可能会注意到,我写道,两种类型的尾数都比其表示形式具有更多的信息。实际上,尾数是一个数字,没有所有非有意义的数字0
。例如,
这意味着尾数将始终为
0.α 1 α 2 ...α 吨 ×β p
其中β是表示的基础。但是由于部分是二进制数,α 1将总是等于1,从而该部分可以被改写为1.α 2 α 3 ...α t + 1的 ×2 p和初始1可以被隐含地假定,给额外的空间(αt + 1)。
现在,很明显32的两倍是64,但这不是单词的来源。
该精度表示十进制数字是多少正确的,即没有任何表示错误或近似的。换句话说,它指示一个人可以安全使用多少个十进制数字。
话虽如此,很容易估计可以安全使用的小数位数:
好的,机器的基本区别是双精度使用的位是单精度的两倍。在通常的实现中,单位是32位,双位是64位。
但这是什么意思呢?如果我们采用IEEE标准,则单个精度数字的尾数约为23位,最大指数约为38;双精度的尾数为52位,最大指数约为308。
像往常一样,详细信息在Wikipedia上。
要在此处添加所有精彩的答案
首先浮点数和双精度数都用于表示数字小数。因此,两者之间的差异源于它们可以存储数字的精度。
例如:我必须存储123.456789,一个可能只能存储123.4567,而另一个可能能够存储确切的123.456789。
因此,基本上,我们想知道数字可以存储多少精度,这就是我们所说的精度。
在这里引用@亚历山德罗
精度表示正确的小数位数,即没有任何形式的表示误差或近似值。换句话说,它指示一个人可以安全使用多少个十进制数字。
浮点数可以精确地存储小数部分中的7-8位数字,而Double可以精确地存储小数部分中的15-16位数字
因此,浮子可以存储两倍的分数部分。这就是为什么Double称为double float的原因
双精度表示数字需要两倍的字长来存储。在32位处理器上,字都是32位,因此双精度字是64位。就性能而言,这意味着对双精度数字进行的运算需要更长的时间才能执行。这样您可以获得更好的射程,但对性能的影响很小。硬件浮点单元可以稍微减轻这种影响,但仍然存在。
N64使用的是基于MIPS R4300i的NEC VR4300,它是64位处理器,但是该处理器通过32位宽的总线与系统的其余部分进行通信。因此,大多数开发人员使用32位数字是因为它们速度更快,并且当时大多数游戏都不需要额外的精度(因此,他们使用浮点数而不是双精度数)。
这三个系统都可以执行单精度和双精度浮点运算,但是可能不是因为性能。(尽管n64之后的几乎所有东西都使用32位总线,所以...)
首先浮点数和双精度数都用于表示数字小数。因此,两者之间的差异源于它们可以存储数字的精度。
例如:我必须存储123.456789,一个可能只能存储123.4567,而另一个可能只能存储精确的123.456789。
因此,基本上,我们想知道数字可以存储多少精度,这就是我们所说的精度。
在这里引用@亚历山德罗
精度表示正确的小数位数,即没有任何形式的表示误差或近似值。换句话说,它指示一个人可以安全使用多少个十进制数字。
浮点数可以精确存储小数部分中的7-8位数字,而Double可以精确存储小数部分中的15-16位数字
因此,double可以存储浮点数的两倍的小数部分。这就是为什么Double称为double float的原因
根据IEEE754•浮点存储标准•32位和64位标准(单精度和双精度)•分别为8位和11位指数•扩展格式(尾数和指数)用于中间结果