所有系统的浮点操作都是一样的吗?

我们正在PHP中制作这个networking应用程序,并且在报告中使用Excel文件来比较我们的结果,以确保我们的编码正在做正确的操作。

现在我们正在运行浮点算术的一些差异。 我们正在进行相同的划分和乘法运算,而且运行的数量略有不同,加起来就有明显的差别。

我的问题是,如果Excel正在委托它的浮点运算的CPU和PHP也是依靠CPU的操作。 还是每个应用程序都实现了自己的一套mathalgorithm?

Microsoft Excel使用特定计算机上的本机Doubletypes来执行其计算。 我不确定PHP正在使用什么。

但是,应该注意,即使在基于x86的机器上复制浮点数也可能会改变它的值。 浮点存储在80位宽的寄存器内部。 它们以64位的宽度存储在内存中。 因此,假设Excel和PHP都运行在基于x86的机器上,即使进行类似的计算,也可以得到不同的值。 特别是在浮点types所支持的范围的极端情况下。

最后,Excel使用的double float和PHP代码中的float (如果您使用的是PHP代码)之间有明显的区别。 确保你没有错配这些float的精度要低得多。

编辑:忘了这一点 – 如果PHP或Excel(更可能是Excel)正在使用SSE扩展,将会有不同的输出,因为他们的浮点操作在64位,而不是80位,双打。

大部分的系统实现IEEE 754 ,这不是非常好,但是对于大多数目的来说足够好。 如果你想要更好的精度,那么看看像GMP 。

处理PHP浮点计算时要非常小心。 PHP是一种灵活的脚本语言,但是它的灵活性和松散的input可能会在types之间进行转换或读取数据时造成危险。

我强烈build议你阅读PHP手册中的浮动页面 。 有一个称为BC Math的模块,可用于任意精度计算,根据您在做什么,您可能需要利用它。

为了更长,但不是任意的精度,请尝试qd 。