2

estoy escribiendo un código en Java consistente en diversas operaciones matemáticas sencillas (divisiones y multiplicaciones). Se trata de un problema de Física.

Resulta que a la hora de calcular ciertas operaciones, con valores ya obtenidos, el resultados de éstas da 0. No entiendo por qué ocurre este error, pues se trata de operaciones sencillas.

public Calculos(int alfa, double Vo) {
        mE = 9.11 * (Math.pow(10, -31));
        q = 6.67 * (Math.pow(10, -19));
        E = 3.5 * (Math.pow(10, 3));

        a = 0;
        Vox = 0;
        Voy = 0;
        t = 0;
        x = 0;
        y = 0;
        tTotal = 0;

        this.alfa = alfa;
        this.Vo = Vo;
    }

    public void mostrarDatos() {
            System.out.println("Angulo de lanzamiento: " + alfa + "º");
            System.out.println("Velocidad inicial: " + Vo + " m/s");
            System.out.println("Vox = " + Vo + "·cos " + alfa + " = " + String.format("%.2f", Vo * (Math.cos(Math.toRadians(alfa)))));
            System.out.println("Voy = " + Vo + "·sen " + alfa + " = " + String.format("%.2f", Vo * (Math.sin(Math.toRadians(alfa)))));
            Vox = Vo * (Math.cos(Math.toRadians(alfa)));
            Voy = Vo * (Math.sin(Math.toRadians(alfa)));
        }

        public void calcularAceleracion() {
            System.out.println("Aceleracion");
            System.out.println("a = F/mE = q·E/mE = " + String.format("%.2f", (q * E) / mE));
            a = (q * E) / mE;
        }

        public void calcularAlturaMaxima() {
            System.out.println("Despejando, tiempo en alcanzar y maxima = " + String.format("%.2f", (Voy / a)) + " s");
            t = Voy / a;
            System.out.println("Por tanto la altura maxima y = " + String.format("%.2f", (Voy * t - 0.5 * a * (Math.pow(t, 2)))) + " m");
            y = (Voy * t - 0.5 * a * (Math.pow(t, 2)));
            System.out.println("La coordenada x de la altura maxima x = Vox·t = " + Vox + "·" + t + " = " + String.format("%.2f", Vox * t) + " m");

        }

La ejecución es la siguiente:

Angulo de lanzamiento: 45º
Velocidad inicial: 5000000.0 m/s
Vox = 5000000.0·cos 45 = 3535533,91
Voy = 5000000.0·sen 45 = 3535533,91
Aceleracion
a = F/mE = q·E/mE = 2562568605927552,00
Despejando, tiempo en alcanzar y maxima = 0,00 s
Por tanto la altura maxima y = 0,00 m
La coordenada x de la altura maxima x = Vox·t = 3535533.905932738·1.3796836103254332E-9 = 0,00 m

Todos los datos son de tipo double excepto el valor alfa, que es int.

DDN
  • 317
  • 1
  • 6
  • 16
  • la variable `a` tiene valor 0 – userStack Mar 04 '17 at 12:28
  • @x-rw la `a` podria ser 0 si no ejecuta `calcularAceleracion()` , pero no creo que sea su caso, el valor de `a` lo saca de `a = (q * E) / mE;`.Saludos – Angel Angel Mar 04 '17 at 13:06
  • Hace poco leí esto, y es muy interesante: http://es.stackoverflow.com/questions/197/por-qué-mis-programas-no-pueden-hacer-cálculos-aritméticos-correctamente Saludos. – A. Cedano Mar 04 '17 at 13:51
  • Qué son `a`, `Vox`, `Voy`. Me refiero a: ¿qué tipos de variables son? ¿Son `double` o son `int`? –  Mar 05 '17 at 02:35

1 Answers1

1

Es posible que usted necesite mas capacidad a la hora de mostrar los decimales por ejemplo puede mirar esto:

  • String.format("%.50f"

public void calcularAlturaMaxima() {

//..

System.out.println("Despejando, tiempo en alcanzar y maxima = " + String.format("%.50f", (Voy / a)) + " s");

//..

System.out.println("Por tanto la altura maxima y = " + String.format("%.50f", (Voy * t - 0.5 * a * (Math.pow(t, 2)))) + " m");

//..

yo he calculado con 1, 1, para alfa y Vo y el resultado es este:

Angulo de lanzamiento: 1º
Velocidad inicial: 1.0 m/s
Vox = 1.0·cos 1 = 1.00
Voy = 1.0·sen 1 = 0.02
Aceleracion
a = F/mE = q·E/mE = 2562568605927552.00
Despejando, tiempo en alcanzar y maxima = 0.00000000000000000681051285687097000000000000000000 s
Por tanto la altura maxima y = 0.00000000000000000005942991921222852000000000000000 m
La coordenada x de la altura maxima x = Vox·t = 0.9998476951563913·6.81051285687097E-18 = 0.00 m

El cual es:

Angulo de lanzamiento: 1º
Velocidad inicial: 1.0 m/s
Vox = 1.0·cos 1 = 1.00
Voy = 1.0·sen 1 = 0.02
Aceleracion
a = F/mE = q·E/mE = 2562568605927552.00
Despejando, tiempo en alcanzar y maxima = 0.00 s
Por tanto la altura maxima y = 0.00 m
La coordenada x de la altura maxima x = Vox·t = 0.9998476951563913·6.81051285687097E-18 = 0.00 m

para:

  • String.format("%.2f"

public void calcularAlturaMaxima() {

//..

System.out.println("Despejando, tiempo en alcanzar y maxima = " + String.format("%.2f", (Voy / a)) + " s");

//..

System.out.println("Por tanto la altura maxima y = " + String.format("%.2f", (Voy * t - 0.5 * a * (Math.pow(t, 2)))) + " m");

//..

Entoces en este ejemplo (y seguramente en muchos) realmente no es que de, un resultado de cero, simplemente es que para la precision que usted determina en format...%.2f, solo se muestran esos (0,00 s y 0,00 m).

Angel Angel
  • 9,623
  • 9
  • 37
  • 68