2012-10-03 74 views
6

Mi código pasa un ángulo en radianes al cos, tan y sin. Todo parece funcionar bien, excepto el bronceado de 90, que da el valor 16331239353195370 por alguna extraña razón. Código de ejemplo:tan() en Java devolviendo un valor extraño

import java.text.DecimalFormat; 

public class mathtable { 

    public static void main(String[] args) { 

    System.out.println("Angle Sin Cos Tan"); 
    System.out.println("----- --- --- ---"); 

    for (double angle = 0.0; angle < 180; angle +=5) { 
     double angle_rad = Math.toRadians(angle); 
     double sin = Math.sin(angle_rad); 
     String sin_4 = new DecimalFormat("#.####").format(sin); 
     double cos = Math.cos(angle_rad); 
     String cos_4 = new DecimalFormat("#.####").format(cos); 
     double tan = Math.tan(angle_rad); 
     String tan_4 = new DecimalFormat("#.####").format(tan); 
     System.out.println(angle + " " + sin_4 + " " + cos_4 + " " + tan_4); 
    } 
    } 
} 

¿Por qué el valor devuelto no es estrictamente igual al IEEE infinito?

Respuesta

13

Bueno, tan(pi/2) en radianes es esencialmente infinito, ¿no? Entonces esperarías obtener un número muy grande, ¿no? (No es infinito porque pi/2 no se puede representar exactamente como double. Usted está encontrando un valor en una curva asintótica muy cerca a donde llegaría a ser infinita.)

Ver these graphs of sin/cos/tan para ver lo que significa, recordar que pi/2 radianes es 90 grados.

+1

No pi/4 pero pi/2 = 90 grados. –

+0

ahh sí, eso tiene sentido, ¡gracias! – Kynian

+0

@SuzanCioc: Doh, gracias, corregido. –