計算機構造與解釋-二分法逼近平方根算法

本文思想主要來源於MIT著名的程序設計課程《計算機構造與解釋》,使用了二分法逼近平方根的算法,算法簡單直觀,重點是解釋了計算機科學是一門離散數學,如何把數學上的問題轉化成計算機可以求解的問題,通過類似的問題懂得了如何像計算機科學家一樣思考問題。

#include <stdio.h>
#include <stdlib.h>

#define EPSILON 0.00001

double squareroot(double , double, double);

main()
{
    double r, root;

    printf("Enter number to be computed:\n\t");
    scanf("%lf", &r);
    root = squareroot(r, 0.0, r);
    printf("Approximate square root has been acquared:\n\t%f", root);
    return 0;
}

double squareroot(double num, double low, double high)
{
    double mid, diff;

    if (num < 0) {
        fputs("Error: negative number does't have square root", stderr);
        abort();
    }
    if (high * high < num || low * low > num) {
        fputs("Error: abound rang is not appropriate", stderr);
        abort();
    }
    if (low * low == num)
        return low;
    if (high * high == num)
        return high;
    do {
        mid = (low + high) / 2;
        diff = mid * mid - num;
        if (diff > 0)
            high = mid;
        else if (diff < 0)
            low = mid;
        else
            return mid;

    }while (abs(diff) > EPSILON);

    return mid;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章