【发布时间】:2017-02-23 22:53:03
【问题描述】:
我有一个使用 Java 8 实现的复杂数据处理算法,并使用 Double 作为数据类型。给定相同的输入(数十万数据库行),该算法输出不同的 Double 值。有时返回值 a,有时返回值 b。这两个值交替执行每次执行。 a 和 b 之间的差异约为 0.0001。我知道 Double 数据类型不会像 Decimal 那样授予确切的值。但是,我不确定它是否会授予 repeatable 结果,假设输入完全相同。 IE。是否有可能以不一致的方式应用舍入策略?我在这里的目的是解释为什么我用相同的输入得到不同的值。
其他细节:我使用的是 Tomcat 8 运行时环境,部署在 SAP HCP 上。数据库级别的数据类型是 Decimal,由于历史原因,我们需要 Java 级别的 Double。
【问题讨论】:
-
我无法回答,但如果您想要绝对的可重复性,请尝试谷歌搜索“fpstrict”
-
在同一个系统上应用完全相同的操作序列应该总是得到相同的答案;使用
fpstrict将保证所有系统上的结果相同。您确定输入中没有不确定性吗? -
没有
fpstrict不应该让它在给定的平台上变得不确定,但是,让它跨平台移植,对吧? @MarcoBolis -
绝对如此,
fpstrict是关于跨不同平台的可重复性。抱歉,如果评论听起来有误导性...
标签: java floating-point java-8 double