找回密码
 欢迎注册
查看: 11080|回复: 9

[原创] 发布两个高精计算公式

[复制链接]
发表于 2018-2-14 10:13:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

×
本帖最后由 落叶 于 2018-2-14 14:00 编辑

我在写高精函数时推导出两个数学公式,在我的程序算法中有比较重要的应用,特分享出来,因在网上没找到相同的公式,所以我以原创的方式发布:
这两个公式都是先找到实例应用,再求理论推导的。
公式原型:Arctan(x)=Arctan(y)+Arctan((x-y)/(1+x*y)),当y无限大时:
Arctan(y)=pi/2,(x-y)/(1+x*y)=-1/x
所以有Arctan(x)=pi/2-Arctan(1/x),,这个公式在计算反正切函数时有重要应用,公式的推导可能有点怪,但这个公式你在任意精度都是百分百正确。
不知能否收入公式大全?
公式原型:ln(x/y)=ln(x)-ln(y)
设x=1,ln(1/y)=0-ln(y);ln(1/y)=-ln(y)      ,这个公式在计算对数函数时有重要应用。
这第一个公式的主要应用是把Arctan函数计算中的极大值转换成更利于泰勒公式计算需要的极小值,从而迅速计算出得数。
第二个公式是计算对数时,中间转换需要用到的,否则有些特殊值会不好算。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2018-2-15 01:00:59 | 显示全部楼层
Arctan(x)= pi/2-Arctan(1/x)    必须x>0

点评

简单反例 x=-1  发表于 2018-2-15 14:18
应x≠0  发表于 2018-2-15 10:20
对,应加上这个条件!  发表于 2018-2-15 06:52
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2018-2-15 15:08:45 | 显示全部楼层
本帖最后由 落叶 于 2018-2-15 15:14 编辑
zeroieme 发表于 2018-2-15 01:00
Arctan(x)= pi/2-Arctan(1/x)    必须x>0


确实如此,感谢你的帮助完善了这个公式!!因为Arctan(-x)=-Arctan(x),我在编程时把负号提出来了,最后再加上所以没发现这个问题。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2018-2-17 14:14:43 | 显示全部楼层
本帖最后由 落叶 于 2018-2-17 14:32 编辑

找到了反正切函数的两个原型公式:

arctan x + arctan y = arctan(x+y)/(1-x*y)

arctan x - arctan y = arctan(x-y)/(1+x*y)


先测试第一个公式:
x=2;
y=999;
atan(x)+atan(y) = 2.6769440439223212569161966738468;
atan((x+y)/(1-x*y)) = -4.6464860966747198154644670943267e-1;
x=-2;
y=999;
atan(x)+atan(y) = 4.6264660833414025088206575348976e-1;
atan((x+y)/(1-x*y)) = 4.6264660833414025088206575348976e-1;
x=2;
y=-999;
atan(x)+atan(y) = -4.6264660833414025088206575348976e-1;
atan((x+y)/(1-x*y)) = -4.6264660833414025088206575348976e-1;
x=-2;
y=-999;
atan(x)+atan(y) = -2.6769440439223212569161966738468;
atan((x+y)/(1-x*y)) = 4.6464860966747198154644670943267e-1;

可以看出只有x和y的符号相反时公式才能成立。

再测试第二个公式:

x=2;
y=999;
atan(x)-atan(y) = -4.6264660833414025088206575348976e-1;
atan((x-y)/(1+x*y)) = -4.6264660833414025088206575348976e-1;
x=-2;
y=999;
atan(x)-atan(y) = -2.6769440439223212569161966738468;
atan((x-y)/(1+x*y)) = 4.6464860966747198154644670943267e-1;
x=2;
y=-999;
atan(x)-atan(y) = 2.6769440439223212569161966738468;
atan((x-y)/(1+x*y)) = -4.6464860966747198154644670943267e-1;
x=-2;
y=-999;
atan(x)-atan(y) = 4.6264660833414025088206575348976e-1;
atan((x-y)/(1+x*y)) = 4.6264660833414025088206575348976e-1;
可以看出只有x和y的符号一致时公式才能成立。

但网上资料介绍此两公式时并没有加限制条件!!!???

现在以第二个公式推导高精计算需要用到的反正切函数公式:

公式原型:Arctan(x)=Arctan(y)+Arctan((x-y)/(1+x*y))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)

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2018-2-17 22:45:07 | 显示全部楼层
余角正切值互为倒数的逆定理。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2018-2-18 20:17:12 | 显示全部楼层
本帖最后由 落叶 于 2018-2-18 20:32 编辑
zeroieme 发表于 2018-2-17 22:45
余角正切值互为倒数的逆定理。


tan(123) = 5.1792747158565518313192407563929e-1;
1/tan(π/2-123) = 5.1792747158565518313192407563929e-1;

在网上查了一下,有个别网页提到余角正切值互为倒数这个定理。这个定理还是比较容易理解和证明的。
我上面论证推导从另一个角度证明了它的逆定理的正确性。
不过要是直接用逆定理的原理,加速反正切函数的泰勒计算,却很不容易想到这方面上来。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2018-2-27 11:53:37 | 显示全部楼层
前两天查到这个公式:Arctan(a)+Arctan(1/a)=pi/2;
网页链接:https://baike.baidu.com/item/arctan/8318716
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-11-21 20:50 , Processed in 0.025260 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表