自己實現的一個sqrt函數
阿新 • • 發佈:2017-09-22
div 記憶 自己實現 其中 收獲 老師 code clu 設置
看了MIT的6.00的計算機科學導論課的第一節,其中,老師講的一個sqrt的實現算法記憶猶新。
代碼如下:
#include <stdio.h> #define E 1e-10 double Abs(double a,double b){ if(a-b<0){ return b - a; } return a - b; } double Sqrt(double value){ double i,last=0,cur=0; for(i=0;i*i<value;i++); i--; do{ last = cur; i = (value/i+i)/2; cur = i*i; }while(Abs(cur,last) > E); return i; }
代碼寫的有點醜,效率可能也不會比庫函數高(記得網上看到過有比庫函數效率高的,不過你們自己去查把。。。),但是大致的思想還是很有收獲的。
這個算法就是根據一個數的平方根的平方等於這個數來建立的。
假設求的是16的平方根
猜想數g g^2 x/g (x/g + g)
3 9 16/3 16/3 + 3
16/3+3 ......
依次叠代直到x - g^2達到指定的精度,就是所求得結果,我這裏設置的是E = 10e-10。
然後就是感嘆一下,同樣是大學,差距真的是。。。。
自己實現的一個sqrt函數