原理來自下面這個連結,為了怕以後來源掛掉所以這裡留一下他大概的內容
http://blog.sina.com.cn/s/blog_3fe235d70100lb6e.html
後來我發現它的原理其實就是用牛頓插值法求x^2 - n = 0
(X*X+A)/(2*X)=X
其中X是開方數,A是被開方數
隨意代入一個X值就會得到更精確的X值
例如將7開平方:
(1*1+7)/(2*1)=4
(4*4+7)/(2*4)=2.875
(2.875*2.875+7)/(2*2.875)=2.654189……
(2.65*2.65+7)/(2*2.65)=2.645754……
7的開方數: 2.64575131106……
實作的Code (C):
double sqr(double n) { double x, y = 1; do { x = y; y = (x*x + n) / (2*x); } while ((y > x && y - x > ACCURACY) || (x > y && x - y > ACCURACY)); return y; }
沒有留言:
張貼留言