25 | 09 | 2018
MENÚ PRINCIPAL
ZONAS
ACCESO USUARIO
USUARIOS CONECTADOS

Hay 99 invitados y ningún miembro en línea

VISITAS
03477337
Hoy
Ayer
Semana
U.semana
Mes
U.Mes
Total
2507
3714
6221
448115
62121
58144
3477337

Tu IP: 148.251.145.225
2018-09-25 13:16
PUBLICIDAD

El IEEE (Instituto de Ingenieros Eléctricos y Electrónicos) ha creado un estándar la presentaciónd de números en coma flotante. Este estándar especifica como deben representarse los números en coma flotante con simple precisión (32 bits) o doble precisión (64 bits), y también cómo deben realizarse las operaciones aritméticas con ellos.

Resumen:

Simple Precisión

El estándar IEEE-754 para la representación en simple precisión de números en coma flotante exige una cadena de 32 bits. El primer bit es el bit de signo (S), los siguientes 8 son los bits del exponente (E) y los restantes 23 son la mantisa (M):

  S EEEEEEEE MMMMMMMMMMMMMMMMMMMMMMM

  0 1      8 9                    31

El valor V representado por esta cadena puede ser determinado como sigue:

  • Si E=255 y M es no nulo, entonces V=NaN ("Not a number")
  • Si E=255 y M es cero y S es 1, entonces V=-Infinito
  • Si E=255 y M es cero y S es 0, entonces V=Infinito
  • Si 0<E<255 entonces V=(-1)**S * 2 ** (E-127) * (1.M)
    donde "1.M" se emplea para representar el número binario creado
    por la anteposición a M de un 1 y un punto binario.
  • Si E=0 y M es no nulo, entonces V=(-1)**S * 2 ** (-126) * (0.M)
    Estos son valores "sin normalizar".
  • Si E=0 y M es cero y S es 1, entonces V=-0
  • Si E=0 y M es cero y S es 0, entonces V=0

En particular,

  0 00000000 00000000000000000000000 = 0

  1 00000000 00000000000000000000000 = -0

 

  0 11111111 00000000000000000000000 = Infinito

  1 11111111 00000000000000000000000 = -Infinito

 

  0 11111111 00000100000000000000000 = NaN

  1 11111111 00100010001001010101010 = NaN

 

  0 10000000 00000000000000000000000 = +1 * 2**(128-127) * 1.0 = 2

  0 10000001 10100000000000000000000 = +1 * 2**(129-127) * 1.101 = 6.5

  1 10000001 10100000000000000000000 = -1 * 2**(129-127) * 1.101 = -6.5

 

  0 00000001 00000000000000000000000 = +1 * 2**(1-127) * 1.0 = 2**(-126)

  0 00000000 10000000000000000000000 = +1 * 2**(-126) * 0.1 = 2**(-127)

  0 00000000 00000000000000000000001 = +1 * 2**(-126) *

                                       0.00000000000000000000001 =

                                       2**(-149)  (valor positivo más pequeño)

Doble precisión

El estándar IEEE-754 para la representación en doble precisión de números en coma flotante exige una cadena de 64 bits. El primer bit es el bit de signo (S), los siguientes 11 son los bits del exponente (E) y los restantes 52 son la mantisa (M):

  S EEEEEEEEEEE MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM

  0 1        11 12                                                63

El valor V representado por esta cadena puede ser determinado como sigue:

  • Si E=2047 y M es no nulo, entonces V=NaN ("Not a number")
  • Si E=2047 y M es cero y S es 1, entonces V=-Infinito
  • Si E=2047 y M es cero y S es 0, entonces V=Infinito
  • Si 0<E<2047 entonces V=(-1)**S * 2 ** (E-1023) * (1.M)
    donde "1.M" se emplea para representar el número binario creado
    por la anteposición a M de un 1 y un punto binario.
  • Si E=0 y M es no nulo, entonces V=(-1)**S * 2 ** (-1022) * (0.M)
    Estos son valores "sin normalizar".
  • Si E=0 y M es cero y S es 1, entonces V=-0
  • Si E=0 y M es cero y S es 0, entonces V=0

 

 

El estándar IEEE 754 ha sido definido por el Instituto de Ingenieros Eléctricos y Electrónicos (Institute of Electrical and Electronics Engineers, IEEE) y establece dos formatos básicos para representar a los números reales en la computadora digital: precisión simple y precisión doble.

 


Precisión simple


En precisión simple, para escribir un número real se usan 32 bits (4 bytes): 1 bit para el signo (s) del número, 23 bits para la mantisa (m) y 8 bits para el exponente (exp), que se distribuyen de la siguiente forma:

 

Figura. Representación de un número real con precisión simple en el estándar 754.


El exponente se suele representar en Exceso a 2n-1-1, mientras que, para la mantisa, normalmente se utiliza Signo Magnitud. Además, la mantisa se suele normalizar colocando la coma decimal a la derecha del bit más significativo.

Ejemplo 1: Para escribir el número 101110,0101011101000011111000011111000100112 en el estándar IEEE 754 con precisión simple, exponente en Exceso a 2n-1-1 y mantisa en Signo Magnitud, primero hay que normalizarlo:

1,011100101011101000011111000011111000100112 x 25


El exponente, en Exceso a 2n-1-1, será:

510 + (28-1 - 1)10 = 510 + (27 - 1)10 = 510 + (128 - 1)10 = 13210 = 10000100EX. a 127


De la mantisa se cogen los bits 23 bits más significativos:

1,0111001010111000000111


El resto de bits no se pueden representar, ya que, no caben en la mantisa. Sin embargo, cuando la mantisa se normaliza situando la coma decimal a la derecha del bit más significativo, dicho bit siempre vale 1. Por tanto, se puede prescindir de él, y coger en su lugar un bit más de la mantisa. De esta forma, la precisión del número representado es mayor. Así, los bits de la mantisa serán:

01110010101110100001111


Al bit omitido se le llama bit implícito. Por otra parte, el bit de signo vale 0, ya que, el número es positivo. En consecuencia, el número se puede representar como:


Los programadores, para representar a los números reales en este formato, suelen utilizar el Sistema Hexadecimal.


Así pues,


En este caso, los números no son exactamente iguales, ya que, con precisión simple no se han podido representar todos los bits de la mantisa.

Ejemplo 2: Dado el número 3E400000CFL del estándar IEEE 754 con precisión simple, exponente en Exceso a 2n-1-1 y mantisa en Signo Magnitud con bit implícito, para averiguar a qué número representa en base 10, se pueden realizar los siguientes pasos:

1º) Convertir 3E40000016 a base 2:


2º) Obtener los bits del signo, de la mantisa y del exponente:


3º) Pasar el exponente a base 10:

011111002 - (28-1 - 1)10 = 12410 - (27 - 1)10 = 12410 - (128 - 1)10 = 12410 - 12710 = -3


4º) Escribir el número en notación científica. Para ello, la mantisa se debe escribir con el bit implícito (1), seguido de la coma decimal (,) y de los bits de la mantisa (10000000000000000000000), teniendo en cuenta que los ceros por la derecha se pueden despreciar. Por otra parte, el número es positivo, ya que, el bit de signo es 0. Por tanto, el número es:

1,1 x 2-3


5º) Expresar el número en base 10. Para ello, hay dos formas de hacerlo, la primera es:

1,1 x 2-3 = 0,00112 = ( 2-3 + 2-4 )10 =  0,12510 + 0,062510 = 0,187510


y la segunda:

1,1 x 2-3 = ( ( 20 + 2-1) x 2-3 )10 = ( ( 1 + 0,5) x 0,125 )10 = ( 1,5 x 0,125 )10  = 0,187510


Por tanto,

3E400000CFL (PRECISIÓN SIMPLE) = 1,1 x 2-3 = 0,00112 = 0,187510

 

 


Precisión doble


Por otro lado, en precisión doble, para escribir un número real se emplean 64 bits (8 bytes): 1 bit para el signo (s) del número, 52 bits para la mantisa (m) y 11 bits para el exponente (exp).

 

Figura. Representación de un número real con precisión doble en el estándar 754.


Ejemplo 3: Si se quiere escribir el número 19,562510 en el estándar IEEE 754 con precisión doble, exponente en Exceso a 2n-1-1 y mantisa en Signo Magnitud con bit implícito, los pasos a seguir son:

1º) Cambiar 19,562510 a base 2. Primero la parte entera:


y, a continuación, la parte fraccionaria:


De modo que,

19,562510 = 10011,10012


2º) Normalizar el número binario obtenido, colocando la coma decimal a la derecha del bit más significativo:

10011,10012 = 1,00111001 x 24


3º) Escribir el exponente en Exceso a 2n-1-1:

410 + (211-1 - 1)10 = 410 + (210 - 1)10 = 410 + (1024 - 1)10 =

 

= 410 + 102310 = 102710 = 10000000011EX. a 1023


4º) Establecer la mantisa utilizando bit implícito. Para ello, se cogen los ocho bits que están a la derecha de la coma (00111001) y el resto de la mantisa se rellena con ceros:

0011100100000000000000000000000000000000000000000000


5º) Expresar el número en el estándar IEEE 754 con precisión doble. En este caso, hay que tener en cuenta que el bit de signo vale 0, ya que, el número es positivo:


6º) Representar el número en hexadecimal:


De tal forma que,

19,562510 = 10011,10012 = 1,00111001 x 24 = 4033A00000000000CFL (PRECISIÓN DOBLE)


Tanto en precisión doble como en precisión simple, existen algunos casos especiales que dependen de los valores del signo, del exponente y de la mantisa:

 

Figura. Casos especiales en el estándar IEEE 754 con precisión simple o doble.


Los dos últimos casos merecen especial atención, ya que, cuando todos los bits del exponente son ceros (00...0), esto quiere decir que no se está utilizando bit implícito. Si, además, la mantisa es todo ceros (00...0), el número representado es el cero (0), pero si la mantisa es distinta de todo ceros, el número que se está representando es muy pequeño, de tal forma que, el exponente valdrá -126 ó -1022, dependiendo de si el número está escrito en precisión simple o doble, respectivamente.

Ejemplo 4: Dado el número 805C0000CFL del estándar IEEE 754 con precisión simple, exponente en Exceso a 2n-1-1 y mantisa en Signo Magnitud con bit implícito, para averiguar a qué número representa en base 10, se pueden realizar los siguientes pasos:

1º) Convertir 805C000016 a base 2:


2º) Obtener los bits del signo, de la mantisa y del exponente:


3º) Al observar que todos los bits del exponente son ceros (00000000) y la mantisa es distinta de todo ceros, se deduce que es un caso especial. Se está representado a un número muy pequeño sin bit implícito y, por tanto, el exponente es -126.

4º) En notación exponencial, puesto que en este caso no se utiliza bit implícito, la mantisa se escribe con un cero (0), seguido de la coma decimal (,) y de los bits de la mantisa (10111000000000000000000). En cuanto al signo del número, es negativo, ya que, el bit de signo es 1. Con todo ello, el número es:

-0,10111 x 2-126


5º) Expresar el número en base 10:

 

 


En las dos tablas siguientes se resumen los cálculos que hay que realizar para deducir el valor en base 10 de un número entero escrito en el estándar IEEE 754 con precisión simple o doble.

 

Figura. Cálculo del valor en base 10 de un número real escrito en el estándar IEEE 754 con precisión simple.

 

 

Figura. Cálculo del valor en base 10 de un número real escrito en el estándar IEEE 754 con precisión doble.


Los rangos de representación en el estándar IEEE 754 con precisión simple y doble, exponente en Exceso a 2n-1-1 y mantisa en Signo Magnitud con bit implícito, son los siguientes:

 

Figura. Rango de representación en el estándar IEEE 754 con precisión simple.

 

 

Figura. Rango de representación en el estándar IEEE 754 con precisión doble.


Ambos rangos de representación son discontinuos, es decir, no se pueden representar todos los números reales que existen entre dos cualesquiera de ellos. Esto es debido a que entre dos números reales cualesquiera siempre existen infinitos números, sin embargo, sólo se dispone de un número determinado de bits para representar a los números reales. Por esta razón, en las computadoras digitales no se pueden representar a todos los números reales. Por ejemplo, con precisión simple, alrededor del número cero (0) existen infinitos números reales, mayores que -2-126 y menores que 2-126, que no son representables. Gráficamente:

 

Figura. Números no representables en el estándar IEEE 754 con precisión simple.

 

BUSCAR EN PORTAL
PORTAL ELECTROZONA