La clase java.lang.Math (I)
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:
System.out.println("e = " + Math.E);
System.out.println("pi = " + Math.PI);
veremos:
e = 2.718281828459045
pi = 3.141592653589793
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);
System.out.println("Deg a Rad: " + angGrados + "º = " + angRadianes + " rad");
angGrados = Math.toDegrees(angRadianes);
System.out.println("Rad a Deg: " + angRadianes + " rad = " + angGrados + "º");
obteniendo al ejecutar:
Deg a Rad: 45.0º = 0.7853981633974483 rad
Rad a Deg: 0.7853981633974483 rad = 45.0º
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);
System.out.println("Coseno de " + angulo + "º = " + valor);
valor = Math.sin(anguloRadianes);
System.out.println("Seno de " + angulo + "º = " + valor);
valor = Math.tan(anguloRadianes);
System.out.println("Tangente de " + angulo + "º = " + valor);
valor = 0.707;
anguloRadianes = Math.acos(valor);
angulo = Math.toDegrees(anguloRadianes);
System.out.println("Arco Coseno de " + valor + " = " + angulo + "º");
anguloRadianes = Math.asin(valor);
angulo = Math.toDegrees(anguloRadianes);
System.out.println("Arco Seno de " + valor + " = " + angulo + "º");
anguloRadianes = Math.atan(valor);
angulo = Math.toDegrees(anguloRadianes);
System.out.println("Arco Tangente de " + valor + " = " + angulo + "º");
tendremos un resultado similar al siguiente:
Coseno de 45.0º = 0.7071067811865476
Seno de 45.0º = 0.7071067811865475
Tangente de 45.0º = 0.9999999999999999
Arco Coseno de 0.707 = 45.008651662838º
Arco Seno de 0.707 = 44.991348337162016º
Arco Tangente de 0.707 = 35.2603107365587º
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);
System.out.println("Coseno Hiperbolico de " + x + " = " + valor);
valor = Math.sinh(x);
System.out.println("Seno Hiperbolico de " + x + " = " + valor);
valor = Math.tanh(x);
System.out.println("Tangente Hiperbolica de " + x + " = " + valor);
obtenemos:
Coseno Hiperbolico de 1.0 = 1.543080634815244
Seno Hiperbolico de 1.0 = 1.1752011936438014
Tangente Hiperbolica de 1.0 = 0.7615941559557649
Paso de coordenadas rectangulares a polares
Para resolver la conversión de un sistema a otro, se pueden utilizar las formulas:

pero hay que hacer varios cálculos intermedios, por lo que la función atan2 y hypot (disponible desde la versión 1.5) realizan el mismo proceso pero de una forma más óptima:
double x = 4.0;
double y = 3.0;
double r = Math.hypot(x, y);
double aRad = Math.atan2(y, x);
double a = Math.toDegrees(aRad);
System.out.println("Para x = " + x + " y = " + y);
System.out.println("r = " + r);
System.out.println("a = " + a + "º");
obteniendo:
Para x = 4.0 y = 3.0
r = 5.0
a = 36.86989764584402º
Más Info
En el siguiente post veremos el resto de las funciones que la clase Math nos brinda.
Hasta entonces
Filed under: Java | 4 Comments
Tags: Java, lang, math
Regreso para comentarle que me parecieron muy practicos estos tips matematicos sr LeFunes, como siempre usted dando en la tecla.
Que no decaigan los posts!! veo pocos por mes, aunque es comprensible en esta epoca del año…je.
Sigamos sacandole el jugo a este lenaguaje, saludos.