我正在优化数值/统计库的排序函数,基于这样的假设:在过滤掉任何NaN并进行一些微调之后,可以将浮点数作为32位整数进行比较而不改变结果,并且可以将双精度数据进行比较64位整数.
这似乎加速了这些数组的排序大约40%,并且只要浮点数的位级表示是IEEE 754,我的假设就成立.是否存在人们实际使用的真实CPU(不包括在嵌入式设备中,这个库没有针对哪个)使用其他可能会破坏这种假设的表示?
https://en.wikipedia.org/wiki/Single-precision_floating-point_format(binary32
,又名float
在使用IEEE754的系统中)
https://en.wikipedia.org/wiki/Double-precision_floating-point_format(binary64
,又名double
在使用IEEE754的系统中)
Andrew Moore.. 21
除了有缺陷的Pentiums之外,任何基于x86或x64的CPU都使用IEEE 754作为其浮点算术标准.
以下是FPA标准及其采用的简要概述.
IEEE 754: Intel x86, and all RISC systems (IBM Power and PowerPC, Compaq/DEC Alpha, HP PA-RISC, Motorola 68xxx and 88xxx, SGI (MIPS) R-xxxx, Sun SPARC, and others); VAX: Compaq/DEC IBM S/390: IBM (however, in 1998, IBM added an IEEE 754 option to S/390) Cray: X-MP, Y-MP, C-90; other Cray models have been based on Alpha and SPARC processors with IEEE-754 arithmetic.
除非您计划在相当奇特的CPU架构上支持您的库,否则可以安全地假设现在99%的CPU符合IEEE 754标准.
除了有缺陷的Pentiums之外,任何基于x86或x64的CPU都使用IEEE 754作为其浮点算术标准.
以下是FPA标准及其采用的简要概述.
IEEE 754: Intel x86, and all RISC systems (IBM Power and PowerPC, Compaq/DEC Alpha, HP PA-RISC, Motorola 68xxx and 88xxx, SGI (MIPS) R-xxxx, Sun SPARC, and others); VAX: Compaq/DEC IBM S/390: IBM (however, in 1998, IBM added an IEEE 754 option to S/390) Cray: X-MP, Y-MP, C-90; other Cray models have been based on Alpha and SPARC processors with IEEE-754 arithmetic.
除非您计划在相当奇特的CPU架构上支持您的库,否则可以安全地假设现在99%的CPU符合IEEE 754标准.
这取决于你在"真实世界"和虚构世界之间画线的位置.
Alpha机器仍然支持Vax G格式(惠普表示他们将至少支持2013年).
IBM十六进制FP仍受IBM z系列大型机的支持.他们添加了IEEE二进制和十进制支持,但据我所知,它们很少使用,因为十六进制FP速度要快得多(IBM已经将它优化了大约45年了......)
直到最近,Unisys仍然销售支持Burroughs FP格式的ClearPath IX服务,以及支持Univac FP格式的ClearPath MCP机器.我相信这些现在只能在仿真中运行(在Xeons上),但从软件的角度来看,它们可能会在未来十年或更长时间内继续使用.
甚至有一些人使用DtCyber在(模拟的)控制数据大型机上运行Plato,并使用其独特的浮点格式.(对不起,但我的第一个认真编程是在CDC网络机器上,所以我无法抗拒它,即使它已经不是"现实世界"几十年了).