#include <stdio.h>
#include <math.h>

int main(void) {
  double a = 0.0, b = 4.0, m;
  double fa, fb, fm;
  double x = 3.0, fx, dfx, xn;
  double min = 1e-6;
  int ia = 0, ib = 0;

  fa = cos(a/2.0);
  fb = cos(b/2.0);

  // 二分法
  while (1) {
    m  = (a + b) / 2.0;
    fm = cos(m/2.0);
    ia++;
    if (fabs(fm) < min) break;
    if (fa * fm < 0.0) {
      b  = m;
      fb = fm;
    } else {
      a  = m;
      fa = fm;
    }
  }

  // ニュートン法
  while (1) {
    fx   = cos(x/2.0);
    dfx  = -0.5 * sin(x/2.0);
    ib++;
    xn = x - fx/dfx;
    x      = xn;
    if (fabs(cos(x/2.0)) < min) break;
  }

  printf("二分法の反復回数 = %d\n", ia);
  printf("ニュートン法の反復回数 = %d\n", ib);

  return 0;
}
