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

#define F(t) (5 + 2*(t) + 0.6*(t)*exp(-0.3*(t)*(t)))

double binsearch(const double t0, const double r, const double dec) {
  const double eps = pow(10, -dec);
  
  double a = t0 - r;
  double b = t0 + r;
  double c = t0;
  
  do {
    double F_a = F(a);
    double F_b = F(b);
    double F_c = F(c);
  	
  	if (fabs(F_c) < eps) {
  	  return c;
  	}
  	
    if (signbit(F_a) ^ signbit(F_c)) {
      b = c;
    } else if (signbit(F_c) ^ signbit(F_b)) {
      a = c;
    } else {
      return NAN;
    }
 
    c = (a + b) / 2;
  } while (1);
}

main() {
  printf("found: %1.10f\n", binsearch(-2.5, 0.5, 10));
  return 0;
}