58 lines
1.3 KiB
C
58 lines
1.3 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <math.h>
|
|
|
|
int main() {
|
|
int i;
|
|
double precision = 1e-10 , x;
|
|
|
|
printf("***輸入x值(x>0)計算平方根***\n");
|
|
printf("\n輸入x值=> ");
|
|
scanf("%lf",&x);
|
|
double mid , lower , upper;
|
|
|
|
if(x<0){
|
|
printf("錯誤! X值不能<1");
|
|
return 1;
|
|
}
|
|
|
|
if(x>1){
|
|
lower=0 , upper=x , i=0;
|
|
printf("\n使用二元搜尋法求解過程如下...\n");
|
|
printf("\n迭代\t區間\t\t\t\t中間值\n");
|
|
printf("-------+-------------------------------+-------------\n");
|
|
while (upper - lower > precision) {
|
|
mid = (lower + upper) / 2.0;
|
|
printf("#%d\t[%.10f,%.10f]\t解=%.10f\n",i+1,lower,upper,mid);
|
|
i++;
|
|
if (mid * mid > x) {
|
|
upper = mid;
|
|
} else {
|
|
lower = mid;
|
|
}
|
|
}
|
|
}
|
|
|
|
if(x<1){
|
|
lower=0 , upper=1 ,i=0;
|
|
printf("\n使用二元搜尋法求解過程如下...\n");
|
|
printf("\n迭代\t區間\t\t\t\t中間值\n");
|
|
printf("-------+-------------------------------+-------------\n");
|
|
while (upper - lower > precision) {
|
|
mid = (lower + upper) / 2.0;
|
|
printf("#%d\t[%.10f,%.10f]\t解=%.10f\n",i+1,lower,upper,mid);
|
|
i++;
|
|
if (mid * mid > x) {
|
|
upper = mid;
|
|
} else {
|
|
lower = mid;
|
|
}
|
|
}
|
|
}
|
|
|
|
printf("\n%f的平方根為%.10f\n",x,mid);
|
|
printf("sqrt(%f)的結果為%.10f\n",x,sqrt(x));
|
|
|
|
return 0;
|
|
}
|