miércoles, 10 de junio de 2015

El tipo de datos real (float, double)

Dominio de valores

Es el conjunto R.
En realidad, se trata de un subconjunto de R, ya que R es un conjunto infinito y no se pueden representar todos los números reales. Dependerá de cuántos bits se utilicen para su representación. Además ni siquiera se pueden representar todos los números reales que se encuentran entre dos números cualesquiera porque también hay infinitos. Esto no ocurría con los números enteros donde se podían representar todos los números comprendidos en un intervalo.

Representación interna
¿Cómo representar los números reales? Si se decide representar todos los números reales con un número fijo de decimales. Por ejemplo, se podrían representar todos los números reales con 3 cifras en la parte entera y 2 decimales. A esto se le llama una representación en coma fija ya que se utilizan un número fijo de decimales.

Descripción: https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhaioVjdEyUyA5EJcFtNjsszxm9SFs6dctNGTIzojCSBHAFNb6aMC_qTnsubqh0hqmipD8E5nyZJKEstHSSnv5oC8g4c8a7wZWd_bCsvn-BR84PmfBpZx3bq9Thap3tmigD5vGqrWNKsxA/s1600/1.jpg

Esta representación no es buena porque no permite representar números muy cercanos al cero lo cual puede producir errores muy grandes:

Ejemplo: Trabajando con los números anteriores (que sólo permiten 2 decimales), al calcular el 1 por mil de 999 (que es 0,999) podría dar que es 0.

Descripción: https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7twn2R617-9bOLBQ1KiNO5M_vueLF049g-VWmDSsvSYnNSYdV6dd8YOR-ou1rOaGmTaXCZW48F1vIoLSwauD0el5FlP_9e8xHbJgjOKa438vkOAmYNlNnMbKX0q1bxinyfjfIKu172hA/s1600/2.jpg

Por ello se utiliza una representación en coma flotante, donde se pueden representar números muy pequeños cercanos al cero y números muy grandes. Un número real se representa con dos números enteros: uno que es la mantisa (que contiene los dígitos significativos) y otro que es el exponente (que determina la posición de la coma)
Todo número real se puede representar así: Mantisa * 10 ^ Exponente

Descripción: https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJ8cGpARt1YRedJhh05WaFcL-Ed6dZhszpCasdzZaHOTRzdR3B4ypp-Zgoby7ImmoUVylFF7KoHSsREQEA0Jipe69DX5WHh-gWq-ujuVheobQlWLSXcIV3FmruKHJnWvLmzSh81aTeZZU/s1600/3.jpg

Se pueden representar números muy pequeños (cercanos al cero) y números muy grandes, pero la precisión es mucho mayor en números cercanos al cero que en números muy grandes. Por lo tanto se puede representar cualquier número real con dos números enteros (que por supuesto se pueden representar en complemento a dos).

 Representación externa y definición en Java

En Java hay varios tipos de datos de tipo real que se diferencian en la precisión de cada uno de ellos.
El número de bits empleado para cada uno de ellos depende del compilador
tipo float con precisión normal habitualmente 32 bits repartidos entre mantisa y exponente
tipo double con doble precisión habitualmente 64 bits repartidos entre mantisa y exponente

Constantes de tipo double:
- Utilizando el punto decimal.
Ejemplos: 23.435, -35.123
- Utilizando la notación científica.
Ejemplo: 234.43e32 que representa el número 234.43 x 1032
3.43e-15 que representa el número 3.43 x 10-15

Constantes de tipo float:
Son los mismas que las de tipo double, pero terminadas en f.
Por ejemplo: 23.435f, -35.123f, 234.43e32f, 3.43e-15f

Descripción: https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9BTGeP3YzF07lwTsHSteHDVqKPOE920wRvvFzsWUgCcL0-sy1CmlhkThjm7Ti1peDM0HTJuQmozIv_Zkkg7uaErqDoJAmaTn6EviQT5ih53Qg90Bk_a605MeSIl4-E7Niwj38T4MXd4w/s1600/4.jpg


No hay comentarios:

Publicar un comentario