#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void dumps(char *messtart,double *y,char *mesend){
  int i;
  unsigned char *p;
  p=(unsigned char *)y;
  printf("%s",messtart);
  for (i=0;i<8;i++){
    printf("%02x ",*(p+i));
  }
  printf("%s",mesend);
}
double f(double x){
    return 2*x-1;  /* 零点を求める函数 */
}
int main(void){
    int i;
    double x,y,z,fx,fy,fz,m;
    double A=(double)0, B=(double)1;
    double epsilon=1.0e-16;
    /* 2分法 */
    x = A;
    y = B;
    fx = f(x);
    fy = f(y);
    for(i = 1; i <= 54; i++){
        z = (x + y)/2;
        fz = f(z);
        if (fx*fz < 0) {
            y = z; fy=fz;
	    //        } else if (fy*fz < 0){
	} else {
            x = z; fx = fz;
	  //          break;
        }
        if (y == x) break;
        printf("i=%d,x=%18.15lf,     y=%18.15lf\n",i,x,y);
        dumps("     ",&x,";"); dumps(" ",&y,"\n");
        printf("i=%d,f(x)=%18.15lf, f(y)=%18.15lf\n",i,fx,fy);
    }
}
