Está en la página 1de 11

NÚMEROS REALES EN PUNTO FLOTANTE

Números reales

Fracciones binarias

Cómo funcionan?

Como programador, deberías estar familiarizado con el concepto de enteros binarios, esto es, la
representación de números enteros como series de bits:

Decimal (base 10) Binario (base 2)

1 ⋅ 101 + 3 ⋅ 100 = 1310 = 11012 = 1 ⋅ 23 + 1 ⋅ 22 + 0 ⋅ 21 + 1 ⋅ 20

1 ⋅ 10 + 3 ⋅ 1 = 1310 = 11012 = 1 ⋅ 8 + 1 ⋅ 4 + 0 ⋅ 2 + 1 ⋅ 1

Así almacenan números internamente computadores. Y para números racionales en notación


posicional, hacen lo mismo:

Decimal (base 10) Binario (base 2)

6 ⋅ 10-1 + 2 ⋅ 10-2 + 5 ⋅ 10-3 = 0.62510 = 0.1012 = 1 ⋅ 2-1 + 0 ⋅ 2-2 + 1 ⋅ 2-3

6 ⋅ 1/10 + 2 ⋅ 1/100 + 5 ⋅ 1/1000 = 0.62510 = 0.1012 = 1 ⋅ 1/2 + 0 ⋅ 1/4 + 1 ⋅ 1/8


Problemas

Aunque funcionan igual en principio, las fracciones binarias son diferentes a las fracciones decimales
en qué números que se pueden representar con precisión dado un número de dígitos, y por tanto
también en qué números resultan en errores de redondeo concretamente, en binario solo se pueden
representar como una fracción finita aquellos números en los que el denominador es una potencia de
2. Por desgracia, esto no incluye la mayoría de los números que pueden ser representados como una
fracción finita en base 10, como 0.1.

Notación Redondeado a 4 Valor redondeado Error de


Fracción Base
posicional dígitos como fracción redondeo

1/10 10 0.1 0.1 1/10 0

1/3 10 0.3 0.3333 3333/10000 1/30000

1/2 2 0.1 0.1 1/2 0

1/10 2 0.00011 0.0001 1/10 3/80

Y así es como ya obtienes un error de redondeo con solamente escribir un número como 0.1 y
pasarlo por tu intérprete o compilador. No es tan grande como 3/80 y puede ser invisible porque los
ordenadores cortan después de 23 o 52 dígitos binarios en vez de 4. Pero el error está ahí
y causará problemas eventualmente si simplemente se ignora.

¿Por qué usar binario?

En el nivel más inferior, los ordenadores están basados en miles de millones de elementos eléctricos
que tienen dos estados (normalmente baja y alta tensión). Interpretándolos como 0 y 1, es muy fácil
construir circuitos para almacenar números binarios y hacer cálculos con ellos.

Mientras que es posible simular el comportamiento de los números decimales con circuitos binarios
también, es menos eficiente. Si los ordenadores usaran números decimales internamente, tendrían
menos memoria y serían más lentos con el mismo nivel de tecnología.

Puesto que la diferencia de comportamiento entre números binarios y decimales no es importante


para la mayor parte de las aplicaciones, la elección lógica es construir ordenadores basados en el
sistema binario y vivir con el hecho de que hay que poner un poco más de atención y esfuerzo para
las aplicaciones que tienen que funcionar como un número decimal.

Números de punto flotante

¿Por qué son necesarios los números de punto flotante?


Como la memoria de los ordenadores es limitada, no puedes almacenar números con precisión infinita,
no importa si usas fracciones binarias o decimales: en algún momento tienes que cortar. Pero:
¿cuánta precisión se necesita?
¿Y dónde se necesita?
¿Cuántos dígitos enteros y cuántos fraccionarios?

 Para un ingeniero construyendo una autopista, no importa si tiene 10 metros o 10,0001 metros
de ancho ─ posiblemente ni siquiera sus mediciones eran así de precisas.
 Para alguien diseñando un microchip, 0.0001 metros (la décima parte de un milímetro) es una
diferencia enorme ─ pero nunca tendrá que manejar distancias mayores de 0.1 metros.
 Un físico necesita usar la velocidad de la luz (más o menos 300000000) y la constante de
gravitación universal (más o menos 0.0000000000667) juntas en el mismo cálculo.

Para satisfacer al ingeniero y al diseñador de circuitos integrados, el formato tiene que ser preciso
para números de órdenes de magnitud muy diferentes. Sin embargo, solo se necesita
precisión relativa(coherente). Para satisfacer al físico, debe ser posible hacer cálculos que involucren
números de órdenes muy dispares.

Básicamente, tener un número fijo de dígitos enteros y fraccionarios no es útil ─ y la solución es un


formato con un punto flotante.

Cómo funcionan los números de punto flotante

La idea es descomponer el número en dos partes:

 Una mantisa (también llamada coeficiente o significando) que contiene los dígitos del número.
Mantisas negativas representan números negativos.
 Un exponente que indica dónde se coloca el punto decimal (o binario) en relación al inicio de
la mantisa. Exponentes negativos representan números menores que uno.

Este formato cumple todos los requisitos:

 Puede representar números de órdenes de magnitud enormemente dispares (limitado por la


longitud del exponente).
 Proporciona la misma precisión relativa para todos los órdenes (limitado por la longitud de la
mantisa).
 Permite cálculos entre magnitudes: multiplicar un número muy grande y uno muy pequeño
conserva la precisión de ambos en el resultado.

Los números de coma flotante decimales normalmente se expresan en notación científica con un punto
explícito siempre entre el primer y el segundo dígitos. El exponente o bien se escribe explícitamente
incluyendo la base, o se usa una e para separarlo de la mantisa.
Mantisa Exponente Notación científica Valor en punto fijo
1.5 4 1.5 ⋅ 104 15000
-2.001 2 -2.001 ⋅ 102 -200.1
5 -3 5 ⋅ 10-3 0.005
6.667 -11 6.667e-11 0.0000000000667

Cuando trabajan con números muy grandes o muy pequeños, los científicos, matemáticos e ingenieros
usan notación científica para expresar esas cantidades. La notación científica es una abreviación
matemática, basada en la idea de que es más fácil leer un exponente que contar muchos ceros en un
número. Números muy grandes o muy pequeños necesitan menos espacio cuando son escritos en
notación científica porque los valores de posición están expresados como potencias de 10. Cálculos
con números largos son más fáciles de hacer cuando se usa notación científica.

Nota que es el exponente el que nos dice si el término es un número muy grande o muy pequeño. Si el número
es ≥ 1 en la notación decimal estándar, el exponente será ≥ 0 en notación científica. En otras palabras,
números grandes requieren potencias positivas de 10.

Si un número está entre 0 y 1 en notación estándar, el exponente será < 0 en notación científica. Números
pequeños son descritos por potencias negativas de 10.

Formato de la Notación Científica


La forma general de un número en notación científica es a x 10n donde y n es un entero.

Número ¿Notación Científica? Explicación


1.85 x 10-2 sí -2 es un entero

no 1/2 no es un entero

0.82 x 1014 no 0.82 no es ≥ 1


10 x 103 no 1. o es < 10

Ejercicios
1. ¿Cuál de los siguientes números está escrito en el formato de notación científica?

A) 4.25 x 100.08

B) 0.425 x 107

C) 42.5 x 105

D) 4.25 x 106
2. ¿Del punto anterior Explique por qué no es notación científica, en los puntos que encontró incorrectos?

Respuesta
A) Incorrecto. El exponente debe ser un entero y 0.08 no es un entero. La respuesta correcta es 4.25 x 106.

B) Incorrecto. Esta no es la forma apropiada porque 0.425 es menor que 1. La respuesta correcta es 4.25 x
106.

C) Incorrecto. Esta no es la forma apropiada porque 42.5 es mayor que 10. La respuesta correcta es 4.25 x
106.

D) Correcto. Este número refleja el formato apropiado porque 4.25 es mayor que 1 y menor que 10 y 6 es un
entero.

Cambiando de Notación Científica a Forma Decimal

También podemos ir al revés — números escritos en notación científica pueden ser trasladados a notación
decimal. Por ejemplo, un átomo de hidrógeno tiene un diámetro de 5 x 10-8 mm. Para escribir este número en
notación decimal, convertimos la potencia de 10 en una serie de ceros entre el número y el punto decimal. Como
el exponente es negativo, todos esos ceros van a la izquierda del número 5:

5 x 10-8

5.
0.5
0.05
0.005
0.0005
0.00005
0.000005
0.0000005
0.00000005

Por cada potencia de 10, movemos el punto decimal un lugar hacia la derecha, Tenga cuidado aquí y no se
deje llevar por los ceros — el número de ceros después del punto decimal siempre será 1 menos que el
exponente. Se necesita una potencia de 10 para mover el punto decimal a la izquierda del primer número.

Ejercicio
Escriba 1.57 x 10-10 en notación decimal.

Respuesta
0.000000000157

El estándar IEEE 754


Casi todo el hardware y lenguajes de programación utilizan números de punto flotante en los mismos
formatos binarios, que están definidos en el estándar IEEE 754. Los formatos más comunes son de
32 o 64 bits de longitud total:

Bits Bits Bits del Número más Número más


Formato
totales significativos exponente pequeño grande

Precisión
32 23 + 1 signo 8 ~1.2 ⋅ 10-38 ~3.4 ⋅ 1038
sencilla

Precisión
64 52 + 1 signo 11 ~5.0 ⋅ 10-324 ~1.8 ⋅ 10308
doble

Hay algunas características:

 La secuencia de bits es primero el bit del signo, seguido del exponente y finalmente los bits
significativos(mantisa).
 El exponente no tiene signo; en su lugar se le resta un desplazamiento (127 para sencilla y
1023 para doble precisión). Esto, junto con la secuencia de bits, permite que los números de
punto flotante se puedan comparar y ordenar correctamente incluso cuando se interpretan
como enteros.
 Se asume que el bit más significativo de la mantisa es 1 y se omite, excepto para casos
especiales.
 Hay valores diferentes para cero positivo y cero negativos. Estos difieren en el bit del signo,
mientras que todos los demás son 0. Deben ser considerados iguales aunque sus secuencias
de bits sean diferentes.
 Hay valores especiales no numéricos (NaN, «not a number» en inglés) en los que el
exponente es todo unos y la mantisa no es todo ceros. Estos valores representan el resultado
de algunas operaciones indefinidas (como multiplicar 0 por infinito, operaciones que
involucren NaN, o casos específicos). Incluso valores NaN con idéntica secuencia de
bits no deben ser considerados iguales.

Para Signo Exponente Mantisa


32bits 1 bit (si es positivo es cero, si es negativo 1) 8 bits 23 bits
64 bits 1 bit (si es positivo es cero, si es negativo 1) 11 bits 52 bits

Ejemplo
Numero = -118,625 para 32 bits

Para Signo Exponente Mantisa


32bits 1 bit (si es positivo es cero, si es negativo 1) 8 bits 23 bits

1. Calcular el signo: para nuestro caso es negativo entonces es uno

2. Normalización de la mantisa:

 Pasamos a binario la parte entera (118);

1110110

 Pasamos a binario la parte fraccionaria =0,625

0,625*2=1.25 0,250*2=0.5 0,50*2=1

 Armamos el binario tomando la parte entera en el mismo orden de los cálculos, 101

 Organizamos el nuevo binario;

1110110,101

 Con el nuevo binario corremos la coma decimal de la parte entera hasta que solo
haya antes de esta un solo digito;

1,110110 101 para nuestro caso es 6

 Determinar la Mantisa toda la parte que nos quedó después de la coma 1,110110
101

 Retirando uno (1), parte entera

 110110101 como vemos este binario tiene 9 dígitos y la mantisa en 23 bits,


completamos con cero

11011010100000000000000 y este es la mantisa


3. Encontrar el exponente

Ya tenemos 6 que lo encontramos en los pasos anteriores, sumas 6+127 siendo 127 el
estándar de presión para 8 bit; 133

 Convertimos 133 a binario

= 10000101 y este es nuestro exponente

Respuesta: conversión -118,625 a estándar IEEE 754 para 32 bits

Para Signo Exponente Mantisa


32bits 1 bit 8 bits 23 bits
1 10000101 11011010100000000000000

conversión estándar IEEE 754 para 32 bits a base decimal

Para Signo Exponente Mantisa


32bits 1 bit 8 bits 23 bits
1 10000101 11011010100000000000000

1. Determinamos el signo

Como el primer digito es uno el número que buscamos es negativo, si el primer digito
resultara cero sería positivo

2. Tomamos el exponente y lo presentamos en notación posicional

10000101

1*2^7+ 0*2^6+ 0*2^5+ 0*2^4+ 0*2^3+ 1*2^2+ 0*2^1+ 1*2^0

Sumamos

128 0 0 0 0 4 0 1 133
siendo 127 el estándar de presión para 8 bit, restamos de 133-127=6

3. Tomamos la mantisa los números más significativos¸

Adicionando uno (1) parte entera

111011010100000000000000

Y colocamos una coma después del primer digito

1,110110 101

Como el exponente es 6, tomamos las siguientes 6 posiciones después de la coma y


ubicamos de nuevo la coma .

1 110110,101

El nuevo binario es 1110110,101

Realizamos notación posicional para conocer el decimal

1. 1. 2. 2 3 4 5 6 7 8 9 10
1*2^6+ 1*2^5+ 1*2^4+ 0*2^3+ 1*2^2+ 1*2^1+ 0*2^0+ 1*2^- 0*2^-2+ 1*2^-
1+ 3+
Sumamos
64 32 16 0 4 2 0 0,5 0 0,125 118,625

Respuesta: conversión estándar IEEE 754 para 32 bits a decimal

-118,625

Ejemplo

Numero = 321,456 para 64 bits

Para Signo Exponente Mantisa


64 bits 1 bit (si es positivo es cero, si es negativo 1) 11 bits 52 bits

1. Calcular el signo: para nuestro caso es negativo entonces es uno

2. Convertir el numero en base binario la parte entera

3. Parte entera 321

101000001

 Parte fraccionario 0.456

011101001

 El numero convertido a binario es

101000001, 011101001

4. Obtener la mantisa

 Con el nuevo binario corremos la coma decimal de la parte entera hasta que solo haya antes
de esta un solo digito; 1,01000001011101001 para nuestro caso es 8

 Mantisa toda la parte que nos quedó después de la coma 1,01000001011101001

 01000001011101001 como vemos este binario tiene 17 dígitos y la mantisa es 52 bits,


completamos con cero
0100000101110100100000000000000000000000000000000000 y este es la mantisa

5. Encontrar el exponente

 Ya tenemos 8 de desplazamiento que lo encontramos en los pasos anteriores, sumas 8+1023


el estándar de presión, siendo 1031 para 11 bit;
 Convertir 1031 a binario; 10000000111; y este es nuestro exponente

Respuesta: conversión 321,456 a estándar IEEE 754 para 64 bits

Para Signo Exponente Mantisa


64 bits 1 bit 11 bits 52 bits

0 10000000111 0100000101110100100000000000000000000000000000000000

Tarea: conversión estándar IEEE 754 para 64 bits a base decimal