我遇到问题,Math.atan返回与输入相同的值。
public double inchToMOA( double in, double range){
double rangeIn = 36*range;
double atan = (in / rangeIn) * -1.0;
double deg = Math.atan(atan);
double moa = deg * 60;
return moa;
}
我把这一切都放在了一行,但我把它分解成不同的变量,看看我是否能找出它为什么不起作用。如果在= -10且范围= 300,则atan约为-.00094。角度应约为-.053度,但math.atan返回-.00094,与输入相同。
我的号码对于math.atan来说太小了吗?
答案 0 :(得分:3)
此处描述了反正切:
http://mathworld.wolfram.com/InverseTangent.html
我不认为你的论点是问题所在。
当然,你意识到计算机触发功能是以弧度而不是度数来处理的,对吗?
答案 1 :(得分:1)
可能只是。如果你看一下数学中切线函数的严格定义,你会看到tan(x) = sin(x)/cos(x)
对于“x”的小值
lim x->0, sin(x) = x
lim x->0, cos(x) = 1
因此,您可以看到lim x->0, tan(x) -> x
意味着它是反向的,arctan,返回它给出的值。至于Math.atan的数值精度,我认为作者已经竭尽全力确保它的数值精度。
答案 2 :(得分:1)
Math.atan
没有错。对于接近零的输入,其值近似为1:1线性,与原点相交。因此越接近零,输入的变化就会越小。