java中准确的trig函数

时间:2013-09-09 13:12:10

标签: java math cosine sin

我在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也给我一些准确的错误。

我正在使用学位。

由于

2 个答案:

答案 0 :(得分:7)

这些数学方法需要弧度,而不是度数。

我猜RA=312.5175被视为312.5175 % (2*Pi)弧度。

答案 1 :(得分: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