/* [Exercise 5] Bisection method */
#include <stdio.h>
#include <math.h>
#define MAX_N 10000000
int main(void) {
int n, k;
double 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+CiNkZWZpbmUgTUFYX04gMTAwMDAwMDAKaW50IG1haW4odm9pZCkgewogICAgaW50IG4sIGs7CiAgICBkb3VibGUgeDEsIHgyLCB4MzsKICAgIGZvciggbiA9IDE7IG4gPD0gTUFYX047IG4gKj0gMTAgKSB7CiAgICAgICAgeDEgPSAwOwogICAgICAgIHgyID0gMTA7CiAgICAgICAgZm9yICggayA9IDA7IGsgPCBuOyBrKysgKSB7CiAgICAgICAgICAgIHgzID0gKHgxICsgeDIpLzI7CiAgICAgICAgICAgIGlmICh4Myp4My0yID09IDApewogICAgICAgICAgICAgICAgcHJpbnRmKCJGaW5kISAobj0lZCkiLCBrKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9ZWxzZSBpZigoeDMqeDMtMikqKHgyKngyLTIpPjApCiAgICAgICAgICAgICAgICB4MiA9IHgzOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB4MSA9IHgzOwogICAgICAgIH0KICAgICAgICBwcmludGYoICJuPSAlZCwgZXN0aW1hdGVkPSAlLjEwZiwgZXJyb3I9ICUuM2VcbiIsIG4sIHgzLCB4My1zcXJ0KDIpICk7CiAgICB9CiAgICByZXR1cm4gMDsKfQo=
n= 1, estimated= 5.0000000000, error= 3.586e+00
n= 10, estimated= 1.4160156250, error= 1.802e-03
n= 100, estimated= 1.4142135624, error= -2.220e-16
n= 1000, estimated= 1.4142135624, error= -2.220e-16
n= 10000, estimated= 1.4142135624, error= -2.220e-16
n= 100000, estimated= 1.4142135624, error= -2.220e-16
n= 1000000, estimated= 1.4142135624, error= -2.220e-16
n= 10000000, estimated= 1.4142135624, error= -2.220e-16