我们正在使用PHP创建这个Web应用程序,在报告中使用Excel文件来比较我们的结果,以确保我们的编码正在进行正确的操作。
现在我们遇到了浮点算术的一些差异。我们正在进行相同的划分和乘法,并且会遇到略有不同的数字,这会产生明显的差异。
我的问题是,Excel是否将它的浮点算法委托给CPU,而PHP也依赖于CPU进行操作。或者每个应用程序是否实现了自己的一组数学算法?
答案 0 :(得分:3)
Microsoft Excel使用特定计算机上的本机Double类型来执行其计算。我不确定PHP正在使用什么。
但是,应该注意的是,即使在基于x86的机器上复制浮点数也可能会改变它的值。浮点内部存储在80位宽的寄存器中。它们以64位宽的块存储在存储器中。因此,假设Excel和PHP都在基于x86的计算机上运行,即使使用类似的计算,也可以获得不同的值。特别是在浮点类型支持的范围的极端情况下。
最后,Excel正在使用的double
和(如果您的PHP代码使用的是)PHP代码中的float
之间存在明显差异。确保您没有不匹配,因为float
的精度要低得多。
答案 1 :(得分:1)
答案 2 :(得分:0)
处理PHP浮点计算时要非常小心。 PHP是一种灵活的脚本语言,但它的灵活性和宽松的类型可能会在类型之间进行转换或读入数据时造成危险。
我强烈建议您阅读PHP手册中的pages on floats。有一个名为BC Math的模块,用于任意精度计算,根据您的工作情况,您可能希望利用它。
答案 3 :(得分:0)
要获得更长但非任意的精度,请尝试qd。