jueves, 24 de enero de 2013

La clase java.lang.Math


La clase java.lang.Math es una clase utilitaria cuyos métodos (todos estáticos) nos permiten realizar algunos cálculos matemáticos comunes.

Antiguamente Math implementaba cada uno de sus métodos, pero hoy en día hace uso de la clase java.lang.StrictMath para llevar adelante sus tareas, llegando al punto que prácticamente es lo mismo llamar a un método de Math como uno de StrictMath.

StrictMath utiliza librerías nativas (escritas en C) para realizar sus cálculos, asegurando entre otras cosas una mejor performance con números flotantes y repetibilidad de los resultados (si se llama un método con los mismos parámetros obtenemos exactamente el mismo resultado, bit a bit). Concretamente hace uso de la librería fdlibm (Freely Distributable Math Library) version 5.3 que es parte del proyecto netlib.



Constantes Matemáticas
Math tiene una referencia a las dos constantes más utilizadas en matemática con una precisión de 15 decimales (suficiente para la mayoría de los mortales). Si ejecutamos:

out.println("e = " + Math.E);
out.println("pi = " + Math.PI);


Conversiones Grados a Radianes, y viseversa
Tenemos dos métodos que realizan la tarea por nosotros

double angGrados = 45; //grados
double angRadianes = Math.toRadians(angGrados);
out.println("Deg a Rad: " + angGrados + "º = " + angRadianes + " rad");
angGrados = Math.toDegrees(angRadianes);
out.println("Rad a Deg: " + angRadianes + " rad = " + angGrados + "º");


Funciones Trigonométricas
Las funciones trigonométricas aceptan y devuelven los ángulos en radianes por lo que siempre hay que convertir desde/hacia grados.

Por ejemplo si ejecutamos:


double valor = 0;

double angulo = 45; //grados
double anguloRadianes = Math.toRadians(angulo);

valor = Math.cos(anguloRadianes);
out.println("Coseno de " + angulo + "º = " + valor);

valor = Math.sin(anguloRadianes);
out.println("Seno de " + angulo + "º = " + valor);

valor = Math.tan(anguloRadianes);
out.println("Tangente de " + angulo + "º = " + valor);

valor = 0.707;

anguloRadianes = Math.acos(valor);
angulo = Math.toDegrees(anguloRadianes);
out.println("Arco Coseno de " + valor + " = " + angulo + "º");

anguloRadianes = Math.asin(valor);
angulo = Math.toDegrees(anguloRadianes);
out.println("Arco Seno de " + valor + " = " + angulo + "º");

anguloRadianes = Math.atan(valor);
angulo = Math.toDegrees(anguloRadianes);
out.println("Arco Tangente de " + valor + " = " + angulo + "º");


Funciones Hiperbólicas

Las funciones hiperbólicas están disponibles a partir de la versión 1.5 Aún no existe implementaciones para las funciones inversas (acosh, asinh y atanh)

Del siguiente ejemplo:


double valor = 0;
double x = 1.0;
 valor = Math.cosh(x);
out.println("Coseno Hiperbolico de " + x + " = " + valor);
valor = Math.sinh(x);
out.println("Seno Hiperbolico de " + x + " = " + valor);
valor = Math.tanh(x);
out.println("Tangente Hiperbolica de " + x + " = " + valor);








No hay comentarios:

Publicar un comentario