2012-05-08 72 views
0

我写了一个服务器和客户端在Java,它运行良好在我自己的笔记本电脑这是一个Windows Vista企业版,但是当我运行它甚至在其他版本的Windows,如XP(我甚至没有改变平台)我在程序的数学部分得到了完全相同的程序不同的结果。问题是什么以及如何以最简单的方式解决问题?不同的结果在不同的操作系统

如果我在Windows XP中运行它将导致为-6.2579985891243E-310,但如果在Windows Vista商业版的结果将是这样的一半,我不确定在Windows Vista的确切结果,因为我无法访问它现在运行该程序并获得反对它的结果。

结果是通过运行正态分布库来计算一些值的正常密度,然后用一些其他值(所有值都在double)中减去它来进行的。使用库IM是this

两个OS中的体系结构是32位,并使用JDK 1.6

+1

如何围绕SSCCE?还是需要大量的代码? –

+0

@jcomeau_ictx是很多代码,因此得到的值有很长的处理方式 – lonesome

+2

好的,但除非有人看到并解决了同样的问题,否则您可能只会得到推测。 –

回答

2

的影响可能是由于在浮点舍入行为非常细微的差别两者。这可能是由于处理器的差异,编译器的不同指令排序优化,数学库实现中的错误等。

您不可能修复上述所有内容(即使专家正确无误,也很难!) - so我建议你编写你的代码,使其不依赖于确切的浮点行为。

。例如,而不是做在浮点数相等测试应该检查两个数字是在小范围内(例如,1 * E-10)

+1

这适用于几乎所有的编程语言,而不仅仅是Java。 –

+0

@Salman - 非常真实!尽管我希望人们用Java更频繁地遇到它,因为Java被部署到如此众多的不同平台的简单后果 – mikera

相关问题