|
|
1
24
英特尔的FPU内部使用80位格式,以获得更高的中间结果精度。 也就是说,您可能有32位或64位变量,但当它们加载到FPU寄存器时,它们会转换为80位;然后,FPU(默认情况下)执行80中的所有计算,但:;计算后,结果存储回32位或64位变量中。
|
|
|
2
9
对我来说,80位的使用是必不可少的。通过这种方式,当使用GOTO库进行向量内积时,我得到了对称矩阵的高阶(30000)特征值和特征向量,还有四个数字,即13,而不是我在相对论原子计算中使用的那种矩阵的9个有效数字,这对于避免落入负能量状态的海洋是必要的。我的另一个选择是使用四倍精度的算法,这会将CPU时间增加60-70倍,同时也会增加RAM需求。任何依赖于大向量内积的计算都将受益。当然,为了将部分内积结果保存在寄存器中,有必要使用汇编语言,就像GOTO库中一样。这就是我如何爱上我的老Opteron 850处理器的原因,我将使用它,只要它们能在我的计算中持续使用。 80位之所以快,而更高的精度却慢得多,是因为CPU的标准浮点硬件有80位寄存器。因此,如果您想要额外的16位(尾数的11位额外、指数的4位额外和一位有效未使用的额外位),那么从64位扩展到80位实际上并不需要太多成本——而从运行时间的角度来看,扩展到80位之外的成本非常高。因此,如果需要,还可以使用80位精度。它不是免费使用的,但是它非常便宜。 |
|
|
3
5
Wikipedia explains 80位格式可以在不丢失信息的情况下表示整个64位整数。因此,CPU的浮点单元可用于实现整数的乘法和除法。 |
|
|
4
2
80位类型尚未提及的另一个优点是,在没有浮点单元但有“乘法”指令的16位或32位处理器上,产生的结果是操作数的两倍(16x16->32或32x32->64),64位尾数再细分为四个或两个16位或32位寄存器的算术运算速度将快于53位尾数的算术运算,53位尾数跨越相同数量的寄存器,但必须与符号和指数共享12个寄存器位。对于不需要比
虽然有些人可能会抱怨扩展精度类型的双舍入行为,但实际上,这只是需要完全位精确跨平台再现性的专业应用中的一个问题。从 从立场上看,64/128与65/128之间的舍入误差,或1024/2048ulp与1025/2048之间的舍入误差之间的差异,不是问题;用语言与 扩展精度变量类型 和 ,在许多没有浮点硬件的平台(例如嵌入式系统)上使用扩展类型将比单精度或双精度浮点类型提供更高的精度和更快的速度。 |
|
5
1
我用80比特做一些纯数学研究。我必须在一个无限级数中求和,这个级数增长得相当大,超出了双倍的范围。收敛性和准确性不是问题,只是处理1E1000等大指数的能力。也许一些聪明的代数可以简化事情,但只编写一个扩展精度的算法要比花时间思考它快得多,也容易得多。 |
|
|
Yatendra Rathore · 浮点数是如何存储在CPU中的? 9 年前 |
|
|
zell · 是否存在由浮点溢出引起的已知安全问题? 9 年前 |
|
|
user2400026 · 将浮点数1864.78转换为二进制和IEEE格式 10 年前 |
|
|
Chris · 如何将4字节IEEE(小端)浮点二进制表示转换为浮点 12 年前 |