在Java中进行复杂计算的方法

时间:2015-09-03 03:16:33

标签: java apache-commons-math

我必须在Java应用程序中实现一些相对复杂的公式。这些公式的输入包括最多30个左右的变量。这些变量的自然形式中有一些是整数,有些是精度约为3到4位小数的实数。我正在使用commons-math函数,但我想知道精度和方便性:

在传递给公式方法之前,最好将所有变量整数转换为Double。这种方式在公式中是一致的,其次我可以安全地使用Double来实现3到4 dp的精度吗?是否有最佳实践"在Java中实现复杂的数学?

2 个答案:

答案 0 :(得分:1)

无需将变量Integers转换为Double。将所有变量初始化为Double,因为如果您正在将公式中的一部分划分为2 Integers并将其添加到30个变量的结果中,那么它将丢失小数位的值。因此,最好将Double用于数学目的,其中小数位数对于产生正确答案非常重要。

答案 1 :(得分:0)

对于具有精确度的浮点计算...我建议使用BigDecimal。因为Double和Float因精确度下降而闻名。 以下片段说明了这个问题。

System.out.println( 0.1f + 0.1f + 0.1f + 0.1f + 0.1f + 0.1f + 0.1f + 0.1f + 0.1f + 0.1f );
System.out.println( 0.1d + 0.1d + 0.1d + 0.1d + 0.1d + 0.1d + 0.1d + 0.1d + 0.1d + 0.1d );

1.0000001
0.9999999999999999

乘以0.1十倍,你希望得到1.但不是。