首页 文章

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

提问于
浏览
29

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

这似乎加快了将这些数组排序在40%左右的某个位置,并且只要浮点数的位级表示是IEEE 754,我的假设就成立 . 是否存在人们实际使用的真实CPU(不包括在嵌入式设备中,这个库没有针对哪个)使用一些可能会打破这种假设的其他表示?


4 回答

  • 12

    除了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标准 .

  • 4

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

    Alpha机器仍然支持

    • Vax G格式(惠普表示他们至少会支持2013年) .

    • IBM十六进制FP仍受IBM z系列大型机的支持 . 他们已经听说他们已经对它进行了大约45年的优化......)

    直到最近,Unisys仍然销售支持Burroughs FP格式的ClearPath IX服务,以及支持Univac FP格式的ClearPath MCP机器 . 我相信这些现在只能在仿真中运行(在Xeons上),但从软件的角度来看,它们可能会继续在未来十年或更长时间内继续使用 .

    甚至还有few people使用DtCyber在(模拟的)控制数据大型机上运行Plato,具有独特的浮点格式 . (对不起,但我的第一个认真的编程是在CDC Cyber机器上,所以我几十年来都没有"real world") .

  • 21

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

  • 3

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

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

相关问题