我在Java
编写了一个服务器和一个客户端,它在我自己的笔记本电脑上工作得很好,这是一个Windows vista商业版,但是当我在其他版本的Windows(如XP)中运行它时(我没有甚至改变平台)我得到了程序数学部分中完全相同程序的不同结果。问题是什么?如何以最简单的方式解决?
如果我在Windows XP中运行它将导致-6.2579985891243E-310
,但如果在Windows vista商业版中,结果将是这个的一半,我不确定Windows Vista上的确切结果因为我没有现在访问它来运行程序并获得结果。
结果是通过运行Normal分布库来计算某些值的正常密度,然后用其他一些值减去它(所有值都在double
中)。我使用的库是this
两种操作系统的体系结构都是32位,都使用jdk 1.6
答案 0 :(得分:2)
效果可能是由于浮点舍入行为的微小差异。这可能是由于处理器的差异,编译器的不同指令排序优化,数学库实现中的错误等。
你不太可能解决上述所有问题(即使专家们做对了也很难!) - 所以我建议你编写代码,使其不依赖于确切的浮点行为。
例如,不应对浮点数进行相等测试,而应检查两个数字是否在小范围内(例如1 * e-10)