现实世界中的任何CPU是否不使用IEEE 754?

我正在基于以下假设优化数字/统计库的排序功能:在过滤掉所有NaN并进行一些调整之后,浮点数可以比较为32位整数而不改变结果,而双精度数可以比较为64位整数。


这似乎可以将这些数组的排序速度提高40%左右,只要浮点数的位级表示为IEEE 754,我的假设就成立。人们实际使用的任何实际CPU(不包括)在嵌入式设备中(此库不针对的对象)使用其他可能会打破此假设的表示形式?


https://zh.wikipedia.org/wiki/Single-precision_floating-point_format(binary32

,也称为float使用IEEE754的系统)

https://zh.wikipedia.org/wiki/Double-precision_floating-point_format(binary64

,也称为double使用IEEE754的系统)


www说
浏览 827回答 3
3回答

胡说叔叔

除了有缺陷的奔腾以外,任何基于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/DECIBM 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。

动漫人物

PowerPC处理器(Macs直到2006-2007年才使用Mac,目前使用的IBM服务器数量很多)使用128位格式,其中包括两个double表示long double,如果使用IEEE 754扩展格式,则采用这种格式。但是,在C或Objective-C中,没有可移植的方式将32位或64位浮点数解释为整数(假设float和uint32_t或double和uint64_t具有相同的位数)。当我需要做这种事情时,我不得不根据编译器编写不同的代码(一个使用联合,一个通过将double *转换为long long *)。不知道用C ++重新解释是否可以移植。
打开App,查看更多内容
随时随地看视频慕课网APP