高精度反正切函数的实现

反正切函数的根本实现方法还是泰勒展开式逼近,但它不能单独采用,必须使自变量X趋进这个函数曲线的平滑度最高的点,这个点的收敛速度最快,反正切函数arctan(x)的这个点是0和无穷大。
这里采用趋近零的方法,arctan(x)中的x的值大多是没法用泰勒展开式计算或计算量太大,时间太长。
这里需要通过反正切公式推导出合适的新的公式,把对 Arctan(x)的直接运算转换成arctan(0.000…xxx)运算,然后通过公式反算回去:
公式原型:Arctan(x)=Arctan(y)+Arctan((x-y)/(1+xy)),x和y的符号必须相同,且x≠0;
当x>0;y正无限大时:
Arctan(y)=pi/2,(x-y)/(1+x
y)=-1/x
所以有:Arctan(x)=pi/2-Arctan(1/x)

当x<0;y负无限大时(或无限小时):
Arctan(y)=-pi/2,(x-y)/(1+x*y)=-1/x
所以有:Arctan(x)=-pi/2-Arctan(1/x)

公式原型:Arctan(x)+Arctan(y)=Arctan((x+y)/(1-xy)),x和y的符号必须相同,且x≠0;
当x=y时;2
Arctan(y)=Arctan((y+y)/(1-y*y))=Arctan(2y/(1-y^2));
设 x=2y/(1-y^2);
这个公式只能通过y算出x值,我们需要的是通过 x算出y;
解 x=2y/(1-y^2),
可以算出y=((1+x ^ 2)^0.5-1)/x.

这时我们可以通过Arctan(x)=pi/2-Arctan(1/x)把大于1的数换成小于1的数,就是x=1/x.
再通过y=((1+x ^ 2)^0.5-1)/x的重复套用,使y的值转换成合适的0.000…xxx。
把转换成的数通过泰勒展开式运算,运算到指定精度返回。
返回后的运算:套用了两个公式时:最终结果=pi/2-(泰勒展开式运算的返回值)×2 ^ (重复套用次数)
或只套用了第二个公式:最终结果=(泰勒展开式运算的返回值)×2^(重复套用次数)。
例:计算Arctan(5);x=1/5;y=((1+x ^ 2) ^ 0.5-1)/x;x=y;y=((1+x ^ 2) ^ 0.5-1)/x;x=y;y=((1+x ^ 2)^0.5-1)/x;
此时y的值是2.4679453700615472487480378578057e-2
pi/2-Arctan(2.4679453700615472487480378578057e-2)×2^3=1.373400766945015860861271926445;
Arctan(5)= 1.373400766945015860861271926445;

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值