/* * Newton.c: Newton Method ニュートン法 */ #include #include /* f(x) = x^2-a = 0 x = sqrt(a) */ int main() { double a, x, x0, err; double epsa = 1e-70, epsr = 1e-10; char s[128]; printf(" a = "); gets(s); sscanf(s,"%lf",&a); x = (a+1)/2; do { x0 = x; x = 0.5*(x0+a/x0); err = fabs(x-x0)/(epsa+epsr*(fabs(x0)+fabs(x))); printf(" x = %e err = %e\n",x,err); } while (err >= 1); putchar('\n'); printf(" sqrt(%e) = %e\n", a,x); return 0; } /* --------- 実行例: 教科書 p.42 例題3.1 --------- */ /* Z:\src\C>Newton a = 2 x = 1.416667e+00 err = 2.857143e+08 x = 1.414216e+00 err = 8.658009e+06 x = 1.414214e+00 err = 7.509114e+03 x = 1.414214e+00 err = 5.638202e-03 sqrt(2.000000e+00) = 1.414214e+00 */