-3

私は天文方程式を使って Java で作業しています。sin関数とcos関数を使ってプログラミングする必要があります。結果に問題を引き起こしている間違った値と丸め誤差を取得しています。

途方もない特定の例:

 Dec=Math.atan(Math.tan(Eps)*Math.sin(RA));

値については、度、Eps=23.440 & RA=312.5175 を使用すると、答えは -17.7223 になるはずですが、代わりに

 Dec=0.6587619787704015

これらの数学関数の回避策または優れた数学ライブラリを提案できる人はいますか? これを C で実行して結果を渡す必要がありますか? 実際、C も正確にいくつかのエラーを出します。

度を使用しています。

ありがとう

4

2 に答える 2

7

これらの数学メソッドは、度数ではなくラジアンを使用します。

ラジアンRA=312.5175として解釈されていると思います。312.5175 % (2*Pi)

于 2013-09-09T13:14:25.430 に答える
2

Java や他の多くの言語の三角法は、度ではなくラジアンに基づいています。あなたはそれを知っているかもしれません

180 degrees = PI = 3.1415... radians.

したがって、すべての辺を 180 で割ると、次のようになります。

1 degree = (3.1415.../180) radians
^^^^^^^^

同じように 3.1415 で割ると...

(180/3.1415...) degrees = 1 radian 
                        ^^^^^^^^

しかし、自分で計算する必要はありません。組み込みメソッドを使用できます

  • Math.toRadians(degrees)
  • Math.toDegrees(radians)

お気に入り

double Eps = 23.440;
double RA = 312.5175;
double EpsRad = Math.toRadians(Eps);
double RARad = Math.toRadians(RA);
double tmp1 = Math.tan(EpsRad);
double tmp2 = Math.sin(RARad);
double result = Math.atan(tmp1 * tmp2);

System.out.println("in radians: " + result); //-0.30931302106018527
System.out.println("in degrees: " + Math.toDegrees(result));//-17.722330655189765

またはそれらをインライン化する

System.out.println(Math.toDegrees(Math.atan(Math.tan(Math
        .toRadians(Eps))) * Math.sin(Math.toRadians(RA))));//-17.722330655189765
于 2013-09-09T13:43:12.763 に答える