fork download
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. #define EPS 1e-5
  5.  
  6. double f(double x) {
  7. return x*x - 1 - sin(x);
  8. }
  9.  
  10. int main() {
  11. double a1 = -1.0, b1 = 0.0;
  12. double a2 = 1.0, b2 = 2.0;
  13.  
  14. double mid1, mid2;
  15. int iter = 0;
  16.  
  17. printf("Iter | [-1,0] interval | [1,2] interval\n");
  18. printf(" | a b mid f(mid) | a b mid f(mid)\n");
  19.  
  20. while (1) {
  21. iter++;
  22.  
  23. mid1 = (a1 + b1) / 2.0;
  24. mid2 = (a2 + b2) / 2.0;
  25.  
  26. printf("%2d | %.6f %.6f %.6f %.6f | %.6f %.6f %.6f %.6f\n",
  27. iter,
  28. a1, b1, mid1, f(mid1),
  29. a2, b2, mid2, f(mid2));
  30.  
  31. // 収束チェック(両方満たしたら終了)
  32. if (fabs(f(mid1)) < EPS && fabs(f(mid2)) < EPS) {
  33. break;
  34. }
  35.  
  36. // 区間1更新
  37. if (f(a1) * f(mid1) < 0) {
  38. b1 = mid1;
  39. } else {
  40. a1 = mid1;
  41. }
  42.  
  43. // 区間2更新
  44. if (f(a2) * f(mid2) < 0) {
  45. b2 = mid2;
  46. } else {
  47. a2 = mid2;
  48. }
  49. }
  50.  
  51. printf("\nFinal Results:\n");
  52. printf("Root in [-1,0] ≈ %.6f\n", mid1);
  53. printf("Root in [1,2] ≈ %.6f\n", mid2);
  54.  
  55. return 0;
  56. }
  57.  
Success #stdin #stdout 0s 5292KB
stdin
Standard input is empty
stdout
Iter |   [-1,0] interval                  |   [1,2] interval
     | a        b        mid      f(mid)  | a        b        mid      f(mid)
 1   | -1.000000 0.000000 -0.500000 -0.270574 | 1.000000 2.000000 1.500000 0.252505
 2   | -1.000000 -0.500000 -0.750000 0.244139 | 1.000000 1.500000 1.250000 -0.386485
 3   | -0.750000 -0.500000 -0.625000 -0.024278 | 1.250000 1.500000 1.375000 -0.090268
 4   | -0.750000 -0.625000 -0.687500 0.107263 | 1.375000 1.500000 1.437500 0.075277
 5   | -0.687500 -0.625000 -0.656250 0.040814 | 1.375000 1.437500 1.406250 -0.008954
 6   | -0.656250 -0.625000 -0.640625 0.008097 | 1.406250 1.437500 1.421875 0.032797
 7   | -0.640625 -0.625000 -0.632812 -0.008133 | 1.406250 1.421875 1.414062 0.011830
 8   | -0.640625 -0.632812 -0.636719 -0.000029 | 1.406250 1.414062 1.410156 0.001416
 9   | -0.640625 -0.636719 -0.638672 0.004031 | 1.406250 1.410156 1.408203 -0.003775
10   | -0.638672 -0.636719 -0.637695 0.002001 | 1.408203 1.410156 1.409180 -0.001181
11   | -0.637695 -0.636719 -0.637207 0.000986 | 1.409180 1.410156 1.409668 0.000117
12   | -0.637207 -0.636719 -0.636963 0.000478 | 1.409180 1.409668 1.409424 -0.000532
13   | -0.636963 -0.636719 -0.636841 0.000225 | 1.409424 1.409668 1.409546 -0.000208
14   | -0.636841 -0.636719 -0.636780 0.000098 | 1.409546 1.409668 1.409607 -0.000045
15   | -0.636780 -0.636719 -0.636749 0.000035 | 1.409607 1.409668 1.409637 0.000036
16   | -0.636749 -0.636719 -0.636734 0.000003 | 1.409607 1.409637 1.409622 -0.000005

Final Results:
Root in [-1,0] ≈ -0.636734
Root in [1,2] ≈ 1.409622