读书人

计算反正切函数解决方法

发布时间: 2012-03-23 12:06:21 作者: rapoo

计算反正切函数
这段代码是在网上找到的,谁知道这段代码的原理是什么非常感谢!!

Java code
    public static double actTan(double radian) {        // System.out.println("radian="+radian);        double retval = 0d;        if (Math.abs(radian) <= 1.0d) {            retval = radian / (1.0D + 0.28d * sqr(radian));        } else {            retval = -radian / (sqr(radian) + 0.28d);            if (radian < -1.0d) {                retval = retval - Math.PI / 2;            } else {                retval = retval + Math.PI / 2;            }        }        return retval;    }


[解决办法]
看不懂。。。
似乎是这样的。

原理1:arctan(x)+arctan(1/x)=pi/2(x>0) arctan(x)+arctan(1/x)=-pi/2(x<0)
所以首先将值缩小到绝对值1之内;
原理2:泰勒展式。参看arctan(x)的泰勒展式;
舍去高次方的值。

以供参考。
[解决办法]
是在一定精度范围内的Pade分数数值逼近。
|x|<1:
atan(x) = x - (1/3)x^3 + (1/5)x^5 - ...

x / ( 1 + ax^2 ) = x - ax^3 + a^2x^3 - ...
那个0.28应该是根据pade分数逼近得来的,只是精度可能比较低,

读书人网 >软件架构设计

热点推荐