所有系统的浮点运算都是一样的吗?

时间:2010-04-14 00:26:38

标签: php excel math floating-point

我们正在使用PHP创建这个Web应用程序,在报告中使用Excel文件来比较我们的结果,以确保我们的编码正在进行正确的操作。

现在我们遇到了浮点算术的一些差异。我们正在进行相同的划分和乘法,并且会遇到略有不同的数字,这会产生明显的差异。

我的问题是,Excel是否将它的浮点算法委托给CPU,而PHP也依赖于CPU进行操作。或者每个应用程序是否实现了自己的一组数学算法?

4 个答案:

答案 0 :(得分:3)

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

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

最后,Excel正在使用的double和(如果您的PHP代码使用的是)PHP代码中的float之间存在明显差异。确保您没有不匹配,因为float的精度要低得多。

编辑:忘了这一点 - 如果PHP或Excel(更可能是Excel)使用SSE扩展,输出会有差异,因为它们的浮点运算操作64位,而不是80位,双倍。

答案 1 :(得分:1)

那里的大多数系统都实现了IEEE 754,这个系统并不是非常好,但对于大多数用途来说已经足够了。如果你想要更好的精确度,那么看看GMP

答案 2 :(得分:0)

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

我强烈建议您阅读PHP手册中的pages on floats。有一个名为BC Math的模块,用于任意精度计算,根据您的工作情况,您可能希望利用它。

答案 3 :(得分:0)

要获得更长但非任意的精度,请尝试qd