Punto Flotante IEEE
Introducción
El punto flotante es una forma de representar números en notación científica, permitiendo representar un rango muy extenso de ellos.
En el formato de punto flotante, el numero se separa en mantisa que indica las cifras significativas y exponente el cual indica la posición de la coma.
En los microprocesadores existe un modulo especifico para tratar estos números denominada FPU (floating-point unit o Unidad de Punto Flotante), estas unidades pueden venir como un CI aislado del microprocesador o como un modulo integrado al mismo.
En particular los microprocesadores de la serie X86 (utilizados en las PC), tuvieron su punto de inflexión con el 80486DX, a partir del mismo la FPU pasó a formar parte del microprocesador, anteriormente se proveía como un integrado aislado, denominado igual que el microprocesador con el que se conectaba pero con terminación 87 en lugar de 86 ( 8086 le correspondia 8087, etc)
En general los microprocesadores con nucle ARM7TDMI, no poseen modulo FPU, es por ello que las operaciones en punto flotante, deben realizarse por medio de subrutinas que utilizan la ALU de enteros que posee el micro.
Componentes
Como se indicó esta representación se realiza mediante una serie de valores los cuales representan las distintas partes del número.
Cada una de estas partes del punto flotante tendrán una ubicación determinada dentro de la codificación del número, y su longitud dependerá del tipo de número.
Exponente
Representa la posición de la coma, en el momento de codificar este campo, al exponente calculado le sumaremos un numero, este numero dependerá de la cantidad de bits asignada al exponente y será la mitad del valor que podemos guardar en esa cantidad.
El exponente nos queda.
Donde e será el exponente verdadero y m es el número de bits del exponente en el formato elegido.
Esta modificación se realiza para evitar el uso de un bit de signo, lo que permite realizar comparaciones mas fácil entre exponentes, dado que estamos sumando la mitad del máximo valor que se puede almacenar en el exponente, transformándolo en un número natural.
Ejemplo
Si nuestro tamaño de exponente es de 8 bits, le estaremos sumando al exponente el numero 127.
Mantisa
La mantisa representa las cifras significativas del número, la característica que se debe tener en cuenta en el momento de codificarla en el campo correspondiente, es que perderemos la información de la coma dentro de ella, es decir, en una notación científica convencional, podemos representar a un número de diferentes maneras o
En el caso del punto flotante, debemos restringir esta representación para poder determinar una posición fija de la coma, para ello se restringe la mantisa a valores comprendidos entre
de esta forma determinamos una posición fija de la coma y un valor fijo de la parte entera de la mantisa ( entero de m = 1 )
En el momento de codificar la mantisa utilizamos solo la parte a la derecha de la coma, justificada a la izquierda. (Un caso particular es el de 10-Byte real, en el cual el campo de parte entera existe, y obviamente valdrá siempre 1)
Signo
En el caso del punto flotante, en la mantisa se guarda siempre el valor absoluto de la misma, esto significa que en el caso de los numero negativos no se guarda el complemento a 2 sino simplemente el valor absoluto de la mantisa
Solo el bit de signo identificará que tipo de número es
1 -> Negativo
0 -> Positivo
Tipos
Dependiendo de los números a guardar ( amplitud del rango de los números y cifras significativas ), podemos utilizar 2 o 3 formatos para almacenarlos dependiendo del compilador utilizado.
Single precision, Short Real o Float
Esta es la forma mas pequeña de representación en punto flotante
- Tamaño de la mantisa 23 bits dando aproximadamente 7 dígitos de precisión
Rango numérico 1.1754E-38 < nro < 3.4028E+38
31 |
30 29 .... 25 24 23 |
22 21 20 ... 4 3 2 1 0 |
Sig |
Exponente |
Mantisa |
Tamaño
Campo |
Tamaño |
Signo |
1 |
Exponente |
8 |
Mantisa |
23 |
Total |
32 |
Double precision, Long Real o Double
- Tamaño de la mantisa 52 bits dando aproximadamente 16 dígitos de precisión
Rango numérico 2.2250E-308 < nro < 1.7976E+308
63 |
62 61 ....53 52 |
51 50 49 48 ... 4 3 2 1 0 |
Sig |
Exponente |
Mantisa |
Tamaño
Campo |
Tamaño |
Signo |
1 |
Exponente |
11 |
Mantisa |
52 |
Total |
64 |
10-Byte Real o Long Double
- Tamaño de la mantisa 64 bits dando aproximadamente 19 dígitos de precisión
Rango numérico 3.3621E-4932 < nro < 1.1897E+4932
79 |
78 77 ....65 64 |
63 |
62 61 60 59 ... 4 3 2 1 0 |
Sig |
Exponente |
Ent |
Mantisa |
Tamaño
Campo |
Tamaño |
Signo |
1 |
Exponente |
15 |
P.Entera Mantisa |
1 |
Mantisa |
63 |
Total |
80 |