Harp Singer Posted August 8, 2012 Report Share Posted August 8, 2012 Estimados, resulta que por ocio quise hacer un programa para calcular raíces, pero recibo resultados inexactos cuando quiero calcular raíces cúbicas y enésimas. Específicamente en esta parte : else { //acá anotamos el método para una raíz enésima double raiz0 = Math.pow(num, 1/coef); System.out.println("La raiz del número es: " +raiz0); } Por ejemplo, para calcular la raiz cúbica de 8, recibo 2.0000 y otros números como respuesta, cuando sólo debería ser 2.0Saludos y gracias de antemano a quién me pueda ayudar :3 Link to comment Share on other sites More sharing options...
AshWilliams Posted August 8, 2012 Report Share Posted August 8, 2012 Mira este enlace:http://www.functionx.com/java/Lesson17.htm Yo creo que va por un tema de inicialización y conversión al tipo de dato adecuado tanto para trabajar, como para mostrar ;) Saludos :krider: PS2: Mira ya vi por donde iba el tema...el tema va por :Math.pow(num, 1/coef);Esa operación en rojo debiese ir en una variable double aparte, onda:double exponente = 0;exponente = 1/coef;Math.pow(num,exponente); Lo sé porque hice lo hice recién Link to comment Share on other sites More sharing options...
Harp Singer Posted August 8, 2012 Author Report Share Posted August 8, 2012 (edited) De por sí estoy trabajando con Double, y gracias por hacerme notar ese detalle, veré qué pasa y edito el post :) EDIT: Sigue con la misma imprecisión :pena: , igual si quieren, les dejo el código completo :c Edited August 8, 2012 by Harp Singer Link to comment Share on other sites More sharing options...
AshWilliams Posted August 8, 2012 Report Share Posted August 8, 2012 Mira hice esto y me funciona ok....al parecer tienes que guardar todo en variables :tonto: public class Raiz { private double base = 0; private double arriba = 0; private double abajo = 0; private double exponente = 0; public Raiz() { arriba = 9; abajo = 3; base = 8; exponente = arriba/abajo; } public void setBase(double base) { this.base = base; } public void setExponente(double arriba,double abajo) { this.exponente = arriba/abajo; } public double obtenerRaiz() { return Math.pow(base,exponente); } } Ahi me funciona de pelos.....lo hice con BlueJ PS: La hice a la rápida....no me golpeen Link to comment Share on other sites More sharing options...
Harp Singer Posted August 8, 2012 Author Report Share Posted August 8, 2012 Bueno, no me queda entonces otra que copypastear mi código... lo hice algo diferente al tuyo :c package calculoraiz; import java.io.*; import java.math.BigDecimal.*; /* * @author Harp Singer/Run.EXE */ public class CalculoRaiz { public static void main(String[] args) throws IOException{ BufferedReader W=new BufferedReader( new InputStreamReader(System.in)); //Buffer para almacenar datos //Pediremos el número al cual queremos calcular su raiz cuadrada System.out.println("Ingrese número para el cual quiera saber su determinada raiz:"); float num=Float.parseFloat(W.readLine()); //una variable que se desea leer //Pediremos que ingrese el grado de la raiz System.out.println("ingrese coeficiente de la raiz (o sea, si quieres una raiz cuadrada, cubica, etc) en números:"); float coef=Float.parseFloat(W.readLine()); //"leer coeficiente" if (coef==2) { double raiz = Math.sqrt(num); //cálculo de raiz cuadrada System.out.println("La raíz cuadrada del número es: " +raiz); } else { //acá anotamos el método para una raíz enésima double raiz0 = Math.pow(num, 1/coef); System.out.println("La raiz del número es: " +raiz0); } } } Link to comment Share on other sites More sharing options...
susodicho Posted August 9, 2012 Report Share Posted August 9, 2012 (edited) :mmm: ¿Qué es exactamente lo que tienes que hacer? Lo pregunto porque veo que declaraste:import java.math.BigDecimal.*;así que supongo que tienes que mostrar resultados precisos o más "amigables". Por ejemplo, la raíz cuadrada de 49, el programa la muestra como 7.0, pero quizás tú necesitas que la muestre como 7, sin decimales, ya que el resultado es exacto (un entero). Además, si quieres usar la clase BigDecimal, tienes que declarar simplemente:import java.math.*y, por último, te corresponde a ti usar la clase, la precisión no va a cambiar por el sólo hecho de incluir BigDecimal en una declaración import :tonto: [hide]Dejé num como tipo double y coef como entero: package calculoraiz; import java.math.*; import java.io.*; public class CalculoRaiz { public static void main(String[] args) throws IOException { BufferedReader W = new BufferedReader(new InputStreamReader(System.in)); System.out.print("Ingrese número para el cual quiera saber su raiz: "); Double num = Double.parseDouble(W.readLine()); //una variable que se desea leer System.out.print("Ingrese grado "n" de la raíz (se calculará la raíz n-ésima): "); int coef = Integer.parseInt(W.readLine()); if (coef == 2) System.out.println("La raíz cuadrada del número es: " + Math.sqrt(num)); else System.out.println("La raiz del número es: " + Math.pow(num, 1.0 / coef)); } } [/hide]Por si acaso, este código sigue siendo inexacto; por ejemplo, si calculas la raíz cúbica de 1728, devuelve 11.999999999999998, en vez de 12. Para corregir esto tendrías que usar la clase BigDecimal para cambiar la precisión.Otra cosa, los problemas de precisión son normales al trabajar con valores en punto flotante, esto es debido a la forma en que se almacenan (a nivel de procesador). Edited August 9, 2012 by susodicho Link to comment Share on other sites More sharing options...
Harp Singer Posted August 9, 2012 Author Report Share Posted August 9, 2012 ups, se me olvidó mencionarlo, pero igual incluí lo de BigDecimal, pero el problema es que no sé cómo implementarlo para las variables, ya que con el NetBeans me sigue dando error uwu Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now