0

私はsin(360)を計算するためにこのJavaコードを持っています:

if(re.equals(" sin "))
{
    try{
        String next=data.get(i+1);
        v1 = Double.parseDouble(next);
        double degreess = v1;
        double radianss = Math.toRadians(degreess);

        BigDecimal bDecimal1 = new BigDecimal(
            Math.sin(radianss), MathContext.DECIMAL32);

        re=""+bDecimal1;
        //re=""+Math.sin(Math.toRadians(Double.valueOf(next)));
        i++;
    }
    catch (Exception e) {
        e.printStackTrace();
    }
}

私はsin(360)正確に0になるはずです。

しかし、私の結果はゼロではありません:-0.0000000000000002449294。なぜこれはゼロではないのですか?

4

2 に答える 2

4

浮動小数点値を処理するときは、abs(sin360 - 0) < deltaの代わりに(deltaが0.0000001のように非常に小さい)を使用する必要がありsin360 == 0ます。これは浮動小数点の内部表現の問題です。 すべてのコンピューター科学者が浮動小数点演算について知っておくべきこと

于 2013-03-07T13:30:37.347 に答える
0

常に小数形式を使用できます。

DecimalFormat format = new DecimalFormat();
format.setMaximumFractionDigits(2);
System.out.println(format.format(bDecimal1));
于 2013-03-07T13:38:54.440 に答える