public static double biseccion(double extremoIzq, double extremoDer, double epsilon, int cantIter, Funcion fun)
            throws Exception {
        double p = 0;
        while (Math.abs(extremoDer - extremoIzq) >= epsilon && cantIter > 0) {
            p = (extremoDer + extremoIzq) / 2;      // Punto medio del intervalo
            if (fun.f(p) == 0) { // Si encontré la raíz termino el algoritmo y devuelvo la raiz hallada.
                return p;
            } else if (fun.f(p) * fun.f(extremoIzq) > 0) {  // Si la funcion en el punto medio es del mismo signo que el extremo izq
                extremoIzq = p;                             // el extremo izquierdo pasa a ser el punto medio
            } else {                                        // Sino, la funcion en el punto medio es del mismo signo que el extremo derecho
                extremoDer = p;                             // y el extremo derecho pasa a ser p.
            }
            cantIter--;
        }
        if(cantIter == 0 && Math.abs(extremoDer - extremoIzq) >= epsilon){
            throw new Exception("Maximas iteraciones alcanzadas");
        }
        return p;
    }