本文思想主要來源於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;
}