1

私がこれを正しく行っているかどうかはわかりません。

可能な限り正確である必要がある科学計算を行っているため、既存の の使用を に変換していDoubleますBigDecimal

// before
double tmp = x - (y / z);

// after
BigDecimal tmp = new BigDecimal(
        x.value().subtract(y.value().divide(z.value())).toString());

これは論理的ですか、それとも何ですか?

4

3 に答える 3

3

結果を BigDecimal に変換する前に、double で算術演算を行っています。それでは精度が上がりません。

すべての数値をできるだけ早く BigDecimal に変換してから、BigDecimal 表現で BigDecimals のメソッド (減算、除算など) を使用して算術を実行する必要があります。

BigDecimal bdX = new BigDecimal(x);
BigDecimal bdY = new BigDecimal(y);
BigDecimal bdZ = new BigDecimal(z);

BigDecimal tmp = bdX.subtract(bdY.divide(bdZ));
于 2013-03-07T08:19:41.347 に答える
2

BigDecimalすべての演算子のメソッドがあります。代わりにそれらを使用する必要があります。スケールと丸めを制御 (指定) することもできます。

ダブルは避け、最初から使いましょうBigDecimal

于 2013-03-07T08:17:16.763 に答える
0

x、y、z が double であると仮定すると、

BigDecimal tmp = new BigDecimal(x).subtract(
           new BigDecimal(y).divide(new BigDecimal(z), MathContext.DECIMAL64));

MathContext を使用する理由を理解するには、BigDecimal.divide API を参照してください。

于 2013-03-07T08:26:34.383 に答える