/* bisec1_2.c: 負領域可能バージョン */ #include double f(double x) // f(x) = x^2 - 2 { return x * x - 2.0; } int main(void) { int n=0; double x1=1, x2=2, x3, err; double eps = 1.0e-6; char s[128]; fprintf(stderr, "# x1, x2 = "); fgets(s, 128, stdin); sscanf(s, "%lf%lf", &x1, &x2); fprintf(stderr, "# eps = "); fgets(s, 128, stdin); sscanf(s, "%lf", &eps); printf("# n, x, err\n"); do { n++; x3 = (x1 + x2) / 2.0; if (f(x1)*f(x3) < 0.0) x2 = x3; else x1 = x3; err = x2 - x1; printf("%4d, % .15e, % .15e\n", n, x3, err); } while (err >= eps); printf("\n# sqrt(2) = % .15e\n", (x1 + x2) / 2.0); return 0; } /* --- 実行例 --- Z:\proen1\kadai4>bisec1_2 # x1, x2 = -2 -1 # eps = 1e-10 # n, x, err 1, -1.500000000000000e+000, 5.000000000000000e-001 2, -1.250000000000000e+000, 2.500000000000000e-001 3, -1.375000000000000e+000, 1.250000000000000e-001 4, -1.437500000000000e+000, 6.250000000000000e-002 5, -1.406250000000000e+000, 3.125000000000000e-002 6, -1.421875000000000e+000, 1.562500000000000e-002 7, -1.414062500000000e+000, 7.812500000000000e-003 8, -1.417968750000000e+000, 3.906250000000000e-003 9, -1.416015625000000e+000, 1.953125000000000e-003 10, -1.415039062500000e+000, 9.765625000000000e-004 11, -1.414550781250000e+000, 4.882812500000000e-004 12, -1.414306640625000e+000, 2.441406250000000e-004 13, -1.414184570312500e+000, 1.220703125000000e-004 14, -1.414245605468750e+000, 6.103515625000000e-005 15, -1.414215087890625e+000, 3.051757812500000e-005 16, -1.414199829101563e+000, 1.525878906250000e-005 17, -1.414207458496094e+000, 7.629394531250000e-006 18, -1.414211273193359e+000, 3.814697265625000e-006 19, -1.414213180541992e+000, 1.907348632812500e-006 20, -1.414214134216309e+000, 9.536743164062500e-007 21, -1.414213657379150e+000, 4.768371582031250e-007 22, -1.414213418960571e+000, 2.384185791015625e-007 23, -1.414213538169861e+000, 1.192092895507813e-007 24, -1.414213597774506e+000, 5.960464477539063e-008 25, -1.414213567972183e+000, 2.980232238769531e-008 26, -1.414213553071022e+000, 1.490116119384766e-008 27, -1.414213560521603e+000, 7.450580596923828e-009 28, -1.414213564246893e+000, 3.725290298461914e-009 29, -1.414213562384248e+000, 1.862645149230957e-009 30, -1.414213561452925e+000, 9.313225746154785e-010 31, -1.414213561918587e+000, 4.656612873077393e-010 32, -1.414213562151417e+000, 2.328306436538696e-010 33, -1.414213562267833e+000, 1.164153218269348e-010 34, -1.414213562326040e+000, 5.820766091346741e-011 # sqrt(2) = -1.414213562355144e+000 */