/* [Exercise 5] Bisection method */
#include <stdio.h>
#include <math.h>
#define MAX_N 10000000
int main(void) {
int n, k;
float x1, x2, x3;
for( n = 1; n <= MAX_N; n *= 10 ) {
x1 = 0;
x2 = 10;
for ( k = 0; k < n; k++ ) {
x3 = (x1 + x2)/2;
if (x3*x3-2 == 0){
break;
}else if((x3*x3-2)*(x2*x2-2)>0)
x2 = x3;
else
x1 = x3;
}
printf( "n= %d, estimated= %.10f, error= %.3e\n", n
, x3
, x3
-sqrt(2) ); }
return 0;
}
LyogW0V4ZXJjaXNlIDVdIEJpc2VjdGlvbiBtZXRob2QgKi8KI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtYXRoLmg+CiNkZWZpbmUgTUFYX04gMTAwMDAwMDAKaW50IG1haW4odm9pZCkgewogICAgaW50IG4sIGs7CiAgICBmbG9hdCB4MSwgeDIsIHgzOwogICAgZm9yKCBuID0gMTsgbiA8PSBNQVhfTjsgbiAqPSAxMCApIHsKICAgICAgICB4MSA9IDA7CiAgICAgICAgeDIgPSAxMDsKICAgICAgICBmb3IgKCBrID0gMDsgayA8IG47IGsrKyApIHsKICAgICAgICAgICAgeDMgPSAoeDEgKyB4MikvMjsKICAgICAgICAgICAgaWYgKHgzKngzLTIgPT0gMCl7CiAgICAgICAgICAgICAgICBwcmludGYoIkZpbmQhIChuPSVkKSIsIGspOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH1lbHNlIGlmKCh4Myp4My0yKSooeDIqeDItMik+MCkKICAgICAgICAgICAgICAgIHgyID0geDM7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHgxID0geDM7CiAgICAgICAgfQogICAgICAgIHByaW50ZiggIm49ICVkLCBlc3RpbWF0ZWQ9ICUuMTBmLCBlcnJvcj0gJS4zZVxuIiwgbiwgeDMsIHgzLXNxcnQoMikgKTsKICAgIH0KICAgIHJldHVybiAwOwp9Cg==
n= 1, estimated= 5.0000000000, error= 3.586e+00
n= 10, estimated= 1.4160156250, error= 1.802e-03
n= 100, estimated= 1.4142136574, error= 9.501e-08
n= 1000, estimated= 1.4142136574, error= 9.501e-08
n= 10000, estimated= 1.4142136574, error= 9.501e-08
n= 100000, estimated= 1.4142136574, error= 9.501e-08
n= 1000000, estimated= 1.4142136574, error= 9.501e-08
n= 10000000, estimated= 1.4142136574, error= 9.501e-08