十分抱歉,上周发烧了,没有写博客。
今天来讲一下我发现的一个开根号公式
n=am+b
mn≈a+mam−1b
其中∣b∣越小越好
灵感来源
某一天做练习册的时候看到某道题估算某个数的平方根:
n=a2+b
假设n=a+x(0<x<1)
n=(a+x)2
n=a2+2ax+x2
因为x2太小我们直接扔掉,原式变成
x=2ab
所以n≈a+2ab
所以就想用类似的方法求mn。
举个栗子
例如说我们要算3
然后我们知道3=22+(−1)
所以3≈2+2×2−1=1.75
但假如我们数字再大一点,会怎么样呢?
10001=1002+1,10001≈100+2×1001=100.005
这已经很接近了!10001=100.004999875…,这个公式得到的值准确率有99.999999875%
假如我们试一下求1002的值:2=1100+1,1002≈1+100×1991=1.01,而1002=1.00695…,准确率有99.698%
所以我们可以总结出这个公式的优缺点:
- 开方数越大越精确
- m越大会越不精确(除非开方数大)
推导
其实推导也不难,只是纯粹的杨辉三角罢了
假设n=am+b并且mn=a+x(x<1)
∴n=(a+x)m
n=am+mam−1x+⋯+maxm−1+xm
此时,我们可以将省略号全部去掉(因为这部分比较难计算),并且把xm去掉(因为这部分太小了)
所以原本的式子就变成了
n=am+max(am−2+xm−2)
b=max(am−2+xm−2)
mab=x(am−2+xm−2)
mab=xam−2+xm−1
然后因为xm−1也很小,那么也扔掉,最后
mab=xam−2
x=mam−1b
所以
mn=a+x
mn=a+mam−1b
Update
Update 2019.10.4
十分感谢@jacky567 给出了一个改进后的方法。
当我们算出a+mam−1b后,他已经接近mn了。
因为我们说了,∣b∣越小越好,那么a+mam−1b代入公式中的a,那么b就会更小,这时我们再迭代计算一遍,这个值就会更接近于mn。
举个例子2:
2=12+1,2≈1+21=1.5
2=(1.5)2+(−0.25),2≈1.5+3−0.25=1217=1.416˙
2=(1217)2+(−1441),2≈1217−4081=408577=1.4142˙156862745098039˙
…
以此类推,你会发现他的精确度越来越高。(94.2809%→99.8268%→99.9998%)
那么只要你一直算下去,他就会更接近于2。
其他开根号的方法
有牛顿迭代法、手算(夹逼法?)、无穷连分数近似法、以及一种神奇的开平方根的卡马克开方法,但是卡马克开方法只适用于计算机(如果是人算就算了吧)。
这些以后有时间再讲(又开了一个新坑)