0

次の 2 行のコードがあります。

var[1] =var[2].multiply(var[3]).multiply(var[4]).multiply(new BigDecimal(Math.sin(var[5].doubleValue())));
    var[5] =new BigDecimal(Math.asin(var[1].divide(var[2],precision,BigDecimal.ROUND_HALF_UP).divide(var[3],precision,BigDecimal.ROUND_HALF_UP).divide(var[4],precision,BigDecimal.ROUND_HALF_UP).doubleValue()));

var[2]、var[3]、var[4]、および var[5] に値を指定して、var[1] を取得しています。

使用される式は

var[1]=var[2]*var[3]*var[4]*sin(var[5])

次に、取得したばかりの var[1] を使用して var[5] を取得しようとしていますが、他の変数と同じ値を取得すると、間違った数値が返され、理由がわかりません

4

3 に答える 3

1

リライト

私はいくつかの算術クモの巣を一掃していますが、次のとおりです。

Math.asin(Math.sin(1)) == ~1
Math.asin(Math.sin(3.14 / 2)) == ~3.14 / 2  // 1.57
Math.asin(Math.sin(3.14)) == ~0

ドキュメントにあるように、Math.asin() の結果は -Pi/2 と Pi/2 の間でバインドされます...

したがって、この範囲内にバインドされているため、答えは「正しくない」ように見えます。

代わりの

asin() が返す最大値は次のとおりです: Pi/2 = 1.57

そして 2 > 1.57 なので:

2 - 1.57 = 0.43

1.57 - 0.43 = 1.14

したがって: 2 = 1.14

于 2012-05-08T23:10:34.873 に答える
1

数値が度ではなくラジアンであることは確かですか?

ラジアンに変換してみてください: http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Math.html#toRadians(double )

于 2012-05-08T22:46:01.250 に答える
0

あなたの問題はそれだと思います

var[5] = asin(var[1]/var[2]/var[3]/var[4])

それよりも

var[5] = asin(var[1] 割る (var[2]*var[3]*var[4]))

あなたのコードを正しく理解できたと思います。

于 2012-05-08T22:53:48.500 に答える