twe*_*ypi 149 floating-point precision operations processor
单精度浮点运算和双精度浮点运算有什么区别?
我对与视频游戏机有关的实用术语特别感兴趣.例如,Nintendo 64是否具有64位处理器,如果确实如此,则意味着它能够进行双精度浮点运算?PS3和Xbox 360能否实现双精度浮点运算或单精度运算,一般情况下使用双精度功能(如果存在?).
Von*_*onC 198
注意:Nintendo 64确实有一个64位处理器,但是:
许多游戏利用了芯片的32位处理模式,因为3D游戏通常不需要64位数据类型可用的更高数据精度,以及处理64位数据使用两倍RAM,缓存的事实和带宽,从而降低整体系统性能.
来自Webopedia:
双精度这个术语有点用词不当,因为精度不是很高.
单词double源于双精度数字使用两倍于常规浮点数的事实.
例如,如果单精度数需要32位,则其双精度对应长度为64位.额外的位不仅增加了精度,还增加了可以表示的幅度范围.
精度和幅度范围增加的确切数量取决于程序用于表示浮点值的格式.
大多数计算机使用称为IEEE浮点格式的标准格式.
单精度
IEEE单精度浮点标准表示需要32位字,其可以表示为从左到右编号为0到31.
最后的23位是"F" 的分数:
S EEEEEEEE FFFFFFFFFFFFFFFFFFFFFFF
0 1 8 9 31
Run Code Online (Sandbox Code Playgroud)由该单词表示的值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)
Run Code Online (Sandbox Code Playgroud)
双精度
IEEE双精度浮点标准表示需要64位字,其可以表示为从0到63编号,从左到右.
最后的52位是"F" 的分数:
S EEEEEEEEEEE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
0 1 11 12 63
Run Code Online (Sandbox Code Playgroud)由该单词表示的值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,
二进制浮点运算标准.
Ale*_*dro 33
我读了很多答案,但似乎都没有正确解释双字来自何处.我记得几年前一位大学教授给出的非常好的解释.
回顾VonC的答案风格,单精度浮点表示使用32位字.
表示:
S EEEEEEEE MMMMMMMMMMMMMMMMMMMMMMM
bits: 31 30 23 22 0
Run Code Online (Sandbox Code Playgroud)
(只是要指出,符号位是最后一个,而不是第一个.)
甲双精度浮点表示使用64位的一个字.
表示:
S EEEEEEEEEEE MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
bits: 63 62 52 51 0
Run Code Online (Sandbox Code Playgroud)
正如您可能注意到的那样,我写道,尾数在两种类型中都比其表示形式多一点信息.事实上,尾数是一个数字,而不是所有的无意义0.例如,
这意味着尾数将始终在表格中
0.α 1 α 2 ...α 吨 ×β p
其中β是表示的基础.但是由于部分是二进制数,α 1将总是等于1,从而该部分可以被改写为1.α 2 α 3 ...α t + 1个的 ×2 p和初始1可以被隐含地假定,腾出空间(αt + 1).
现在,32的两倍显然是64,但这不是这个词的来源.
该精度表示十进制数字是多少正确的,即没有任何表示错误或近似的.换句话说,它表示可以安全使用多少个十进制数字.
话虽如此,很容易估计可以安全使用的小数位数:
在这里添加所有精彩的答案
首先,float和double都用于表示数字小数.因此,两者之间的差异源于他们可以存储数字的精确度.
例如:我必须存储123.456789一个可能只能存储123.4567而其他可能能够存储确切的123.456789.
所以,基本上我们想知道数字的存储准确度是多少,我们称之为精确度.
在这里引用@Alessandro
精度表示正确的小数位数,即没有任何表示错误或近似值.换句话说,它表示可以安全使用多少个十进制数字.
Float可以在小数部分准确存储大约7-8位数字,而Double可以在小数部分准确存储大约15-16位数字
因此,float可以存储两倍的小数部分.这就是为什么Double被称为double的浮点数
所有人都非常详细地解释了,我无法进一步补充。虽然我想用外行的术语或简单的英语来解释它
1.9 is less precise than 1.99
1.99 is less precise than 1.999
1.999 is less precise than 1.9999
Run Code Online (Sandbox Code Playgroud)
.....
能够存储或表示“1.9”的变量提供的精度低于能够保持或表示 1.9999 的变量。这些分数在大型计算中可能会产生巨大的差异。
至于问题"ps3和xbxo 360是否能够实现双精度浮点运算或仅使用单精度并且在使用中是双精度功能(如果它们存在?)."
我相信这两个平台都无法实现双浮点.最初的Cell处理器只有32位浮点数,与XBox 360所基于的ATI硬件相同(R600).Cell稍后获得了双浮点支持,但我很确定PS3不会使用该芯片.