c言語プログラムの質問です。 どんな方程式でも成り立つように二分法で二つの解を出そうとしているのですが、一つ目の解を小さいほうの解と仮定しs=m+0.1とし二分法、その後一つ目の解と二つ目の解が似ているならl=m+0.1とし計算としたいのですがうまくいきません。 #include<stdio.h> #include<stdlib.h> #include<math.h> double func_y(double x) { return x * x - 2 * x -2; } double getMidpoint(double a, double b) { return (a + b) / 2.0; } int main(void) { int a,i; double s, l, m, m2, kyo; srand((int)time(NULL)); do { s = rand() % 201 - 100; l = rand() % 201 - 100; } while (l < s || func_y(s) * func_y(l) >= 0); printf("x_s=%.lf,x_l=%.lf¥n", s, l); kyo = 0.000001; i = 0; printf("# x_s x_l |x_s-x_l|¥n"); while (s - l <= -kyo || s - l >= kyo) { printf("[%d] %.15lf %.15lf %.15lf¥n", i, s, l, l - s); i++; m = getMidpoint(s, l); if (func_y(s) * func_y(m) < 0) { l = m; } else { s = m; } } m = (s + l) / 2.0; s = m + 0.1; do { if (func_y(s)<0) { l = rand() % 201 - 100; a = s; } else{ l = rand() % 201 - 100; a =-101; } } while (a>l||func_y(s) * func_y(l) >= 0); printf("x_s=%.lf,x_l=%.lf¥n",s, l); i = 0; printf("# x_s x_l |x_s-x_l|¥n"); while (s - l <= -kyo || s - l >= kyo) { printf("[%d] %.15lf %.15lf %.15lf¥n", i, s, l, l - s); i++; m2 = getMidpoint(s, l); if (func_y(s) * func_y(m2) < 0) { l = m2; } else { s = m2; } } m2 = (s + l) / 2.0; if (fabs(m2 - m) > 0.001) { printf("近似解1: %.15lf¥n", m); printf("近似解2: %.15lf¥n", m2); } else { l = m2 - 0.1; do { s = rand() % 201 - 100; } while (s>l||func_y(s) * func_y(l) >= 0); printf("x_s=%.lf,x_l=%.lf¥n", s, l); i = 0; while (s - l <= -kyo || s - l >= kyo) { printf("[%d] %.15lf %.15lf %.15lf¥n", i, s, l, l - s); i++; m2 = getMidpoint(s, l); if (func_y(s) * func_y(m2) < 0) { l = m2; } else { s = m2; } } m2 = (s + l) / 2.0; printf("近似解1:%.15lf¥n", m); printf("近似解2:%.15lf", m2); } return 0; }