Está en la página 1de 4

La Clase Math

La clase Math representa la librera matemtica de Java. Las funciones que contiene son las de todos los lenguajes, parece que se han metido en una clase solamente a propsito de agrupacin, por eso se encapsulan en Math, y lo mismo sucede con las dems clases que corresponden a objetos que tienen un tipo equivalente (Character, Float, etc.). El constructor de la clase es privado, por los que no se pueden crear instancias de la clase. Sin embargo, Math es public para que se pueda llamar desde cualquier sitio y static para que no haya que inicializarla.

Funciones Matemticas
Si se importa la clase, se tiene acceso al conjunto de funciones matemticas estndar: Math.abs( x ) Math.sin( double a ) Math.cos( double a ) Math.tan( double a ) Math.asin( double r ) Math.acos( double r ) Math.atan( double r ) Math.atan2(double a,double b) Math.exp( double x ) Math.log( double x ) Math.sqrt( double x ) Math.ceil( double a ) Math.floor( double a ) Math.rint( double a ) Math.pow( double x,double y ) Math.round( x ) Math.random() Math.max( a,b ) Math.min( a,b ) Math.E Math.PI para int, long, float y double devuelve el seno del ngulo a en radianes devuelve el coseno del ngulo a en radianes devuelve la tangente del ngulo a en radianes devuelve el ngulo cuyo seno es r devuelve el ngulo cuyo coseno es r devuelve el ngulo cuya tangente es r devuelve el ngulo cuya tangente es a/b devuelve e elevado a x devuelve el logaritmo natural de x devuelve la raz cuadrada de x devuelve el nmero completo ms pequeo mayor o igual quea devuelve el nmero completo ms grande menor o igual que a devuelve el valor double truncado de a devuelve y elevado a x para double y float devuelve un double para int, long, float y double para int, long, float y double para la base exponencial, aproximadamente 2.72 para PI, aproximadamente 3.14

El ejemplo java800.java, muestra la utilizacin de algunas de las funciones de la clase Math: class java800 { public static void main( String args[] ) { int x; double rand,y,z; float max; rand = Math.random(); x = Math.abs( -123 );

y = Math.round( 123.567 ); z = Math.pow( 2,4 ); max = Math.max( (float)1e10,(float)3e9 ); System.out.println( System.out.println( System.out.println( System.out.println( System.out.println( } rand ); x ); y ); z ); max );

Precisin arbitraria
La inclusin de la conectividadcon bases de datos SQL , oblig a definir en Java una nueva forma de trabajar con datos SQL de tipo NUMERIC y DECIMAL , que requieren precisin absoluta. Como resultado surgieron las clases BigDecimal y BigInteger, que permiten trabajar con precisin arbitraria, para representar datos que son habituales de las Bases de Datos, como puede ser la deuda pblica de un pas en una moneda pequea, como pueda se la lira italiana. La clase BigInteger tambin resulta til cuando los tipos primitivos de Java (byte, int, long) no proporcionan sufiente precicin. Por ejemplo, cuando se est construyendo una clave pblica para encriptacin que involucra operaciones exponenciales muy grantes y a manipular nmeros primos de cientos de bits, y esta clase es ideal para estas acciones El constructor ms sencillo es el que construye un BigDecimal a partir de su representacin como cadena: BigDecimal( String s ); Aunque la cadena no puede contener ningn signo no numrico, ni siquiera espacios en blanco, ya que de lo contrario se produce una excepcin de tipo NumberFormatException. Un mtodo interesante es el que permite fijar la precisin que se desea tener, es decir, el nmero de dgitos significativos que hay depus de la coma decimal, y el tipo de redondeo que se va a utilizar: setScale( int precision,int redondeo ); Los operadores que se utilizan con estas clases no son los clsicos, sino que estn disponibles mtodos especiales para sumar, restar, multiplicar dividir y para desplazar la coma decimal un nmero determinado de posiciones a derecha o izquierda: add( BigDecimal a ); substract( BigDecimal a ); multiply( BigDecimal a ); divide( BigDecimal a,int modo_redondeo ); movePointRight( int posiciones ); movePointLeft( int posiciones );

Una aplicacin ya clsica es la muestra el ejemplo java801.java, que calcula una constante conocida con un nmero determinado de decimales, en este caso la constante e. Aunque no es la forma ptima de calcularla, porque hay otras que convergen ms rpidamente, se puede zomar una aproximacin con z=200 y una precisin de 300 dgitos, utilizando la frmula siguiente:

Y el cdigo de este ejemplo tan sencillo que implementa la frmula es el que se muestra a continuacin: import java.math.*; class java801 { public static void main( String args[] ) { BigDecimal e; BigDecimal factor; e = new BigDecimal( "1" ).setScale( 300,BigDecimal.ROUND_DOWN ); factor = new BigDecimal( "1" ).setScale( 300,BigDecimal.ROUND_DOWN ); // Se obtiene la expresin del parntesis de la frmula factor = factor.divide( new BigDecimal( 200 ),BigDecimal.ROUND_DOWN ); factor = factor.add( new BigDecimal( 1 ) ); // Se multiplica la expresin para obtener la potencia adecuada for( int i=1; i < 200; i++ ) e = e.multiply( factor ); System.out.println( e ); } } Cuando se ejecute el ejemplo es conveniente hacerlo con el comando: %java java801 | more para que la pantalla no se llene con una cantidad impresionante de cifras que van a impedir que las primeras queden visibles el tiempo suficiente para darse cuenta de que estn ah.

La Clase Character
Al trabajar con caracteres se necesitan muchas funciones de comprobacin y traslacin. Estas funciones estn empleadas en la clase Character. De esta clase s que se pueden crear instancias, al contrario que sucede con la clase Math.

Declaraciones
La primera sentencia crear una variable carcter y la segunda un objeto Character:

char c; Character C;

Comprobaciones booleanas
Character.isLowerCase( char ) Character.isUpperCase( char ) Character.isDigit( char ) Character.isSpace( char ) devuelve devuelve devuelve devuelve true true true true si el carcter es una letra minscula si el carcter es una letra mayscula para caracteres numricos para espacios en blanco

En este caso, si tuvisemos un objeto Character C , no se podra hacer C.isLowerCase(), porque no se ha hecho un new de Character. Estas funciones son estticas y no conocen al objeto, por eso hay que crearlo antes.

Traslaciones de Caracteres
Character.toLowerCase( char ) Character.toUpperCase( char ) convierte entre mayscula y minscula convierte entre minscula y mayscula

Traslaciones de carcter/dgito
int i = Character.digit( c,base ); char c = Character.forDigit( i,base );

Mtodos de la clase Character


C = new Character( 'J' ); char c = C.charValue(); String s = C.toString();