我有一个使用 Java 8 并使用 Double 作为数据类型实现的复杂数据处理算法。给定相同的输入(数十万个数据库行),该算法输出不同的 Double 值。有时返回值 a,有时返回值 b。这两个值在每次执行时交替出现。 a 和 b 之间的差异约为 0.0001。我知道 Double 数据类型不像 Decimal 那样授予精确值。但是,我不确定如果输入完全相同,它是否会产生可重复 结果。 IE。是否有可能以不一致的方式应用舍入策略?我在这里的目的是解释为什么我用相同的输入得到不同的值。
其他细节:我正在使用 Tomcat 8 运行时环境,在 SAP HCP 上完成部署。数据库级别的数据类型是 Decimal,由于历史原因,我们需要 Java 级别的 Double。
最佳答案
给定相同的输入, float 计算(在相同的平台上)将产生相同的输出。
但是,如果您以不同的顺序输入输入数字,您可能会得到不同的结果(即使这在数学上没有什么不同)。也许这就是这里发生的事情(看到你从关系数据库中提取数字,除非你明确排序,否则它没有定义的顺序)。如果您使用多个 CPU 进行并行计算并且数据每次都以不同的方式划分和组合,则可能会发生同样的事情。
关于java - Double 上的数学运算结果是否完全可重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42427719/