我正在用Java实现基于Markov链的用Excel公式编写的算法,并将结果与Jxl库进行比较。如我所读,问题是这两种语言的精度不同。实际上,它们只返回第二个十进制数字的相等结果。有没有一种方法可以在Java中“模拟” Excel精度,以测试算法的行为是否完全相同?
您可以在此处找到Excel精度如何工作的分析:
https://community.oracle.com/thread/2053255?start=15&tstart=0
似乎在处理时四舍五入为第16个十进制数字。
请参见此问题以模拟浮点精度:
Matching Excel's floating point in Java
我想这一切都意味着内部,即在单个单元格的公式内部,Excel使用的是普通双精度。但是在设置单元格的值时,小数点后16位四舍五入。这意味着对于您的算法,每当曾经有中间结果写入单元格时,您都需要使用链接答案中的舍入方法。测试一下,对我来说,尚不清楚这些中间值是否需要取整。