RE:Raiz cuadrada con numeros de mayor precision
Bueno pues para aportar algo al foro os dejo la solucion q he utilizado, buscando encotre una clase donde lo hacian con double y me dedique a traspasar el codigo para que pueda funcionar con BigDecimal y segun parece funciona asi que si alguien lo necesita aqui lo tiene ;)
/**
* Función principal que prepara la llamada a la fución realmente
* recursiva. Ya se utilizó esta forma en la práctica de recursión y complejidad.
*/
private static BigDecimal raizRecursivo( BigDecimal numero, BigDecimal margenError) {
return raizRecursivoAux(numero, new BigDecimal("0"), numero, margenError);
}
/**
* Función recursiva que va arrinconando la raíz cuadrada hasta que se aproxima menor que el
* margen de error. Al igual que en la práctica de recursión, nos llamamos varias veces pero
* cambiando los parámetros de entrada de forma que vamos reduciendo el numero de operaciones.
*/
private static BigDecimal raizRecursivoAux( BigDecimal numero, BigDecimal menor, BigDecimal mayor, BigDecimal margenError ) {
//Creamos variable para almacenar resultado y hacer sólo return al final
BigDecimal resultado =new BigDecimal("0.0"); // Como está declarada dentro del método es necesario inicializarla a un valor
if ( mayor.subtract( menor).compareTo(margenError)==-1 ) { //mayor - menor < margenError
//return menor;
resultado = menor;
}
else {
BigDecimal media = (menor.add(mayor)).divide(new BigDecimal("2.0")); //( menor + mayor ) / 2.0;
if ( media.multiply(media).compareTo(numero)==1 ) { //media * media > numero
//return raizRecursivoAux( numero, menor, media, margenError );
resultado = raizRecursivoAux( numero, menor, media, margenError );
}
else if ( media.multiply(media).compareTo(numero)==-1) { //media*media < numero
//return raizRecursivoAux( numero, media, mayor, margenError );
resultado =raizRecursivoAux( numero, media, mayor, margenError );
}
else {
//return media;
resultado = media;
}
}
return resultado;
}
Un saludo