java - Double 上的数学运算结果是否完全可重复?

标签 java floating-point java-8 double

我有一个使用 Java 8 并使用 Double 作为数据类型实现的复杂数据处理算法。给定相同的输入(数十万个数据库行),该算法输出不同的 Double 值。有时返回值 a,有时返回值 b。这两个值在每次执行时交替出现。 ab 之间的差异约为 0.0001。我知道 Double 数据类型不像 Decimal 那样授予精确值。但是,我不确定如果输入完全相同,它是否会产生可重复 结果。 IE。是否有可能以不一致的方式应用舍入策略?我在这里的目的是解释为什么我用相同的输入得到不同的值。

其他细节:我正在使用 Tomcat 8 运行时环境,在 SAP HCP 上完成部署。数据库级别的数据类型是 Decimal,由于历史原因,我们需要 Java 级别的 Double。

最佳答案

给定相同的输入, float 计算(在相同的平台上)将产生相同的输出。

但是,如果您以不同的顺序输入输入数字,您可能会得到不同的结果(即使这在数学上没有什么不同)。也许这就是这里发生的事情(看到你从关系数据库中提取数字,除非你明确排序,否则它没有定义的顺序)。如果您使用多个 CPU 进行并行计算并且数据每次都以不同的方式划分和组合,则可能会发生同样的事情。

关于java - Double 上的数学运算结果是否完全可重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42427719/

相关文章:

java - 如何在使用流读取文件时保留换行符 - java 8

java-8 - 带参数的 Java 8 函数引用

java - Android 进度条大小调整

java - 我应该在 apache fop 的类路径中包含哪些 jar

mysql - Coldfusion 数据库插入将长数值更改为科学计数法

c - 仅使用单精度 float 逼近 [0,pi] 上的余弦

java - 如果存在Optional<>值则抛出异常

java - 模拟对象来运行不同的 void 方法

java - 如何在 Jhipster 生成的应用程序上从 AbstractAuditingEntity 扩展实体?

java - 在 Java 货币表示中,使用长/短尾数/指数模式而不是双/epsilon 模式的优缺点是什么