任何真实的CPU都不使用IEEE 754吗?

时间:2010-02-10 04:44:25

标签: performance sorting floating-point ieee-754

我正在优化数值/统计库的排序函数,基于这样的假设:在过滤掉任何NaN并做一点点琐事之后,可以将浮点数作为32位整数进行比较,而不会改变结果和双精度数据库比较为64位整数。

这似乎加快了将这些数组排序在40%左右的某个位置,并且只要浮点数的位级表示是IEEE 754,我的假设就成立。是否存在任何实际的CPU使用(在这个库没有定位的嵌入式设备中)使用一些可能会破坏这种假设的其他表示形式?


5 个答案:

答案 0 :(得分:21)

flawed 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标准。

答案 1 :(得分:13)

这取决于你在“真实世界”和虚构世界之间画线的位置。

  1. Alpha机器仍然支持Vax G格式(惠普表示他们至少会支持2013年)。
  2. IBM十六进制FP仍受IBM z系列大型机的支持。他们已经添加了IEEE二进制和十进制支持,但据我所知,他们很少使用,因为十六进制FP的速度要快得多(IBM已经优化了大约45年了......)
  3. 直到最近,Unisys仍然销售支持Burroughs FP格式的ClearPath IX服务,以及支持Univac FP格式的ClearPath MCP机器。我相信这些现在只能在仿真中运行(在Xeons上),但从软件的角度来看,它们可能会在未来十年或更长时间内继续使用。

    甚至有few people使用DtCyber在(模拟的)控制数据大型机上运行Plato,并使用其独特的浮点格式。 (对不起,但我的第一个严肃的节目是在CDC Cyber​​机器上,所以我无法抗拒它,即使它已经不是“现实世界”几十年了。)

答案 2 :(得分:4)

Cell Processor的SPU differ in a few ways(就像缺少INF和NAN一样),但我不认为存在差异会打破你的假设......

答案 3 :(得分:4)

PowerPC处理器(直到2006-2007左右的Mac,大量当前的IBM服务器)使用128位格式,包括两个双倍长双,而不是IEEE 754扩展格式。

但是,在C或Objective-C中,没有可移植的方法将32位或64位浮点数解释为整数(假设float和uint32_t,或double和uint64_t具有相同的位数)。当我需要做那种事情时,我必须根据编译器编写不同的代码(一个使用union,一个是通过将double *转换为long long *)。不知道C ++中的重新解释是否可以移植。

答案 4 :(得分:0)

许多实际的CPU没有任何本机浮点格式。针对此类CPU的许多C语言和其他语言实现都捆绑了使用IEEE-754单精度和双精度格式的库,并忽略了扩展精度格式,尽管事实上其他格式也更适合于许多用途。