很少有 FPU 符合 IEEE 标准(尽管他们声称)。所以在不同的硬件上运行相同的程序确实会给你不同的结果。结果很可能出现在极端情况下,作为在软件中使用 FPU 的一部分,您应该避免这些情况。
IEEE 错误通常在软件中修补,您确定您今天运行的操作系统包含来自制造商的适当陷阱和补丁吗?在操作系统更新之前或之后呢?是否删除了所有错误并添加了错误修复?C 编译器是否与所有这些同步,C 编译器是否生成正确的代码?
对此进行测试可能是徒劳的。在您交付产品之前,您不会看到问题。
遵守 FP 规则 1:永远不要使用 if(something==something) 比较。IMO 的第二条规则与 ascii 到 fp 或 fp 到 ascii(printf、scanf 等)有关。那里有比硬件更多的准确性和错误问题。
随着每一代新硬件(密度)的出现,来自太阳的影响更加明显。我们已经在行星表面上遇到了 SEU 的问题,因此独立于浮点计算,您会遇到问题(很少有供应商会费心去关心,所以预计新硬件会更频繁地崩溃)。
通过消耗大量逻辑,fpu 可能会非常快(单个时钟周期)。不比整数 alu 慢。不要将此与现代 fpus 与 alus 一样简单混淆,fpus 很昂贵。(alus 同样消耗更多的乘法和除法逻辑以将其降低到一个时钟周期,但它几乎没有 fpu 大)。
遵守上面的简单规则,多研究浮点数,了解随之而来的缺陷和陷阱。您可能需要定期检查无穷大或 nans。您的问题更有可能出现在编译器和操作系统中而不是硬件中(通常不仅仅是 fp 数学)。如今,现代硬件(和软件)根据定义充满了错误,因此请尽量减少错误,而不是运行软件的错误。