1. 程式人生 > >自己實現的一個sqrt函數

自己實現的一個sqrt函數

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函數