private double optimizeParam(String devfile, double a, double b, double c,
			double tau, int radix) throws FileNotFoundException {
		double phi = (1 + Math.sqrt(5)) / 2;
		double resphi = 2 - phi;
		double x;
		if (c - b > b - a)
			x = b + resphi * (c - b);
		else
			x = b - resphi * (b - a);
		if (Math.abs(c - a) < tau * (Math.abs(b) + Math.abs(x)))
			return (c + a) / 2;
		assert (f(devfile, x, radix) != f(devfile, b, radix));
		if (f(devfile, x, radix) < f(devfile, b, radix)) {
			if (c - b > b - a)
				return optimizeParam(devfile, b, x, c, tau, radix);
			else
				return optimizeParam(devfile, a, x, b, tau, radix);
		} else {
			if (c - b > b - a)
				return optimizeParam(devfile, a, b, x, tau, radix);
			else
				return optimizeParam(devfile, x, b, c, tau, radix);
		}
	}