Análisis Numérico I 4° Semestre - campus.unadmexico.mx
Transcript of Análisis Numérico I 4° Semestre - campus.unadmexico.mx
Matemáticas
Análisis Numérico I
4° Semestre
Unidad 2. Sistemas numéricos
Clave
050920624/ 060920624
Universidad Abierta y a Distancia de México
Unidad 2. Sistemas numéricos
UnADM | DCEIT | MT | MANU1 2
Índice
Unidad 2. Sistemas numéricos 3
Presentación de la unidad 3
Competencia específica 3
Logros de la unidad 3
2.1. Sistemas numéricos 4
2.1.1. El sistema binario y el sistema decimal 5
2.1.2. Operaciones 9
2.2. Soluciones numéricas 11
2.2.1 Otros sistemas numéricos (octal, hexadecimal, base n) 11
2.2.2. Punto flotante 13
2.3. Representación numérica 14
2.3.1 Método del punto fijo 23
2.3.2. Fuentes de error 26
2.3.3. Tipos de error 27
2.3.4. Estabilidad numérica 29
Cierre de la unidad 36
Para saber más: 36
Referencias Bibliográficas 37
Figura 1. Figura que ilustra el proceso de cómputo y cálculo teórico de una función así como la
propagación del error hacia delante (función computada y teórica) y el error hacia atrás (error en los
datos) .......................................................................................................................................................... 31
Tabla 1. Parámetros usados en diferentes sistemas de punto flotante, los estándares de la IEEE para SP y
DP corresponder a las arquitecturas de 32 y 64 bits respectivamente. ..................................................... 17
Tabla 2. Tabla que muestra el conjunto de punto flotante para <2,3,-1,1>. En la primer columna se
enumeran todos los elementos de este conjunto, la segunda corresponde al signo, las siguientes tres a la
mantisa, después el exponente y al final su representación en base 10. .................................................. 18
Unidad 2. Sistemas numéricos
UnADM | DCEIT | MT | MANU1 3
Unidad 2. Sistemas numéricos
Presentación de la unidad
En esta sección analizaremos y entenderemos como se representa la información de forma
numérica. También generalizaremos este concepto para presentar como se representa la
información numéricamente en cualquier base.
Analizaremos y presentaremos los sistemas de punto flotante y su funcionamiento para
representar información
Presentaremos también las distintas fuentes de error que pueden surgir a partir de esta
representación.
Competencia específica
Representar análisis de errores para resolver algoritmos complejos utilizando distintas
representaciones numéricas
Logros de la unidad
• Conocer la necesidad e importancia de representar los
números reales a través de un conjunto de números
finito.
• Conocer los métodos que se siguen para que
represente lo mejor posible a los reales y la aritmética
redefinida para dicho conjunto.
• Conocer el error que se produce al mapear los
elementos y operaciones reales en estos conjuntos y
Unidad 2. Sistemas numéricos
UnADM | DCEIT | MT | MANU1 4
como diseñar algoritmos que minimicen este error.
2.1. Sistemas numéricos
El desarrollo de los sistemas numéricos responde a la necesidad específica de encontrar el
símbolo que corresponde al cómputo de algún problema, es decir, una vez que nosotros hemos
planteado y resuelto un problema este resultado es representado por un símbolo específico,
satisfaciendo así una de las tareas fundamentales de las matemáticas, la de mapear elementos
entre conjuntos.
A lo largo de la Historia han existido varios sistemas numéricos, entre ellos podemos distinguir
el decimal, el binario y el romano. Actualmente el sistema numérico que usamos
cotidianamente es el decimal que es de tipo posicional, a diferencia del sistema de números
romanos sobre el cual, nuestro actual sistema, representa una ventaja que se puede notar a la
hora de hacer operaciones. A continuación, distinguiremos las distintas propiedades que
caracterizan al sistema posicional en distintas bases.
En la unidad anterior vimos la dificultad de presentar la gran mayoría de los números reales, en
realidad podemos concluir que, en nuestra vida cotidiana, únicamente trabajamos con un
subconjunto de los números racionales, a saber aquellos en los que la expansión decimal no es
infinita (y de hecho es mucho menor que eso).
Es importante hacer notar que de aquí en adelante haremos una distinción entre los resultados
teóricos y los aplicados, esto se debe a que no siempre teoría y práctica empatan y de hecho
eso es justo de lo que trata toda esta asignatura.
Unidad 2. Sistemas numéricos
UnADM | DCEIT | MT | MANU1 5
2.1.1. El sistema binario y el sistema decimal
Comencemos pues con el siguiente ejemplo: el número 352 es expresable de la siguiente
forma:
352 = 3 ∙ 100 + 5 ∙ 10 + 2 = 3 ∙ 102 + 5 ∙ 101 + 2 ∙ 100
De la expresión anterior es fácil distinguir que el 352 fue expresado como una combinación
lineal de los coeficientes {3,5,2} y las potencias {0,1,2} del número 10, entonces al 10 lo
denominamos la base de este sistema. Es decir, en nuestro sistema el número 352 fue
expresado en forma polinomial con un conjunto de coeficientes y los distintos elementos de la
base de nuestro sistema.
Tampoco es difícil observar que nuestro sistema posicional base 10 (de aquí en adelante,
sistema base 10) es capaz de representar números menores a 1, esto, como bien sabes se
puede lograr usando potencias negativas de la base. Por ejemplo, el 352.11 se expresa como:
352.11 = 3 ∙ 102 + 5 ∙ 101 + 2 ∙ 100 + 1 ∙ 10−1 + 1 ∙ 10−2
Decimos que este es un sistema posicional porque no es lo mismo un 3 multiplicando al
elemento de la base cuya potencia es dos (102), que si estuviera multiplicando al elemento de
la base cuya potencia es 0 (100).
3 ∙ 102 ≠ 3 ∙ 100
La notación es la siguiente, el número natural 𝑁 se expresa como:
𝑁 = 𝑎𝑛10𝑛 + 𝑎𝑛−110
𝑛−1 +⋯+ 𝑎0100 (1)
La elección del número 10 como la base del sistema numérico parece obvia es meramente
circunstancial, tal vez su predominio se haya debido a su facilidad de entendimiento y manejo,
pero a lo largo de la historia el ser humano ha escogido distintas bases para expresar números,
entre estos están la bases 12, 20 e incluso 60. La elección de la base depende en gran medida
del campo específico en donde se quieran mapear números.
Unidad 2. Sistemas numéricos
UnADM | DCEIT | MT | MANU1 6
Con la llegada de las computadoras digitales, donde los diferentes estados basales son la
existencia o no de un impulso magnético o eléctrico, se escogió como la base de sistema
numérico al 2, esto es, se usa el sistema binario para representar números con estas
computadoras.
La expresión de números en esta base funciona de la misma forma que en el sistema de base
10. Podemos ver los siguientes ejemplos para aclarar este punto:
1103101310
===
1211211012
===
1 ∙ 20
1 ∙ 21 + 1 ∙ 20
1 ∙ 23 + 1 ∙ 22 + 0 ∙ 21 + 1 ∙ 20
El ejemplo anterior está dividido en tres columnas, la primera indica el número en base 10, la
segunda indica su equivalente en sistema binario y la tercera la expansión polinomial del mismo
número en base 2. Los subíndices en las primeras dos columnas indican la base en la que se
encuentra expresada el número en cuestión. De aquí en adelante no usaremos el subíndice 10 a
menos que sea estrictamente necesario identificar dicha base.
De forma general podemos decir que cualquier entero no negativo 𝑁 se representa en sistema
binario de la siguiente forma:
𝑁 = (𝑎𝑛𝑎𝑛−1…𝑎0)2 = 𝑎𝑛2𝑛 + 𝑎𝑛−12
𝑛−1 +⋯+ 𝑎020 = 𝑎𝑛2
𝑛 +⋯+ 𝑎0 (2)
En el sistema posicional binario a cada uno de los diferentes dígitos en las distintas posiciones
se le denomina como bit. Al conjunto de 8 bits se le denomina byte. Las computadoras de hoy
en día representan la información de manera interna (números, caracteres) con conjuntos de
bytes, particularmente de 4 y 8 bytes, es decir, con 32 y 64 bits, a estos conjuntos de bits se les
denominan palabras, es decir, palabras de 32 bits o palabras de 64 bits.
Entonces, a partir de estos ejemplos podemos extraer el siguiente algoritmo. Considerando los
coeficientes 𝑎𝑛, … , 𝑎0 del polinomio en base 𝛼
Unidad 2. Sistemas numéricos
UnADM | DCEIT | MT | MANU1 7
𝑝(𝑥) = 𝑎𝑛𝑥𝑛 + 𝑎𝑛−1𝑥
𝑛−1 +⋯+ 𝑎1𝑥1 + 𝑎0𝑥
0 (3)
y el número 𝛽 se pueden mapear los número 𝑏𝑖 con 𝑛 ≤ 𝑖 ≤ 0 de la siguiente forma
𝑏𝑛 ← 𝑎𝑛𝑏𝑛−1 ← 𝑎𝑛−1 + 𝑏𝑛𝛽𝑏𝑛−2 ← 𝑎𝑛−2 + 𝑏𝑛−1𝛽
⋮𝑏0 ← 𝑎0 + 𝑏1𝛽
Algoritmo 1. Algoritmo para convertir un número de una base 𝜶 a un número en base 𝜷
Entonces 𝑏0 = 𝑝(𝛽).
Aplicando este algoritmo al número binario 11012 queda de la siguiente forma. Nuestros
coeficientes son los números 𝑎3 = 1, 𝑎2 = 1, 𝑎1 = 0 y 𝑎0 = 1 y el número 𝛽 = 2
𝑏3𝑏2𝑏1
===
11 + 1 ∙ 2 = 30 + 3 ∙ 2 = 6
𝑏0 = 1 + 6 ∙ 2 = 13
Por lo tanto
11012 ≡ 1310
Entonces podemos ver que este algoritmo puede convertir un número binario a su equivalente
decimal ¿A qué número corresponde el número 10002?
La conversión de un número en base 10 a base 2 se puede hacer mediante el algoritmo inverso,
es decir, a partir de la expresión (2) sabemos que el número 𝑁10 se puede desarrollar en
potencias de 2 de la siguiente forma
𝑁 =∑ 𝑏𝑖2𝑖
𝑛
𝑖=0
(4)
donde 𝑏𝑖𝜖{0,1}. Entonces 𝑁 en notación binaria, análogamente al caso decimal, queda
expresado como:
𝑁2 ≡ 𝑏𝑛𝑏𝑛−1…𝑏1𝑏0
Unidad 2. Sistemas numéricos
UnADM | DCEIT | MT | MANU1 8
Si a la expresión (4) la dividimos entre 2 entonces obtenemos:
𝑁
2= 𝑏𝑛2
𝑛−1 + 𝑏𝑛−12𝑛−2 +⋯+ 𝑏12
0 +𝑏02
Es decir, al dividir 𝑁/2 el residuo que ya no fue divisible entre 2 es 𝑏0, nos queda ahora
encontrar 𝑏1 de la misma forma, esto lo haremos encontrando el residuo de dividir 𝑄0/2 donde
𝑄0 está definido por 𝑁/2 = 𝑄0 + 𝑏0/2 y así recursivamente hasta llegar a algún número
natural 𝐾 tal que 𝑄𝐾 = 0
Entonces el algoritmo nos queda de la siguiente manera:
𝑖 = 0 𝑁 = 2𝑄𝑖 + 𝑏𝑖 𝐻𝑎𝑠𝑡𝑎 𝑄𝑖 = 0 𝑄𝑖 = 2𝑄𝑖+1 + 𝑏𝑖+1
Algoritmo 2. Algoritmo para convertir un número en base 10 a base 2, se requiere encontrar el residuo en cada paso e irlo
anexando. Si reemplazamos el 2 por un número cualquiera 𝒉 entonces este mismo algoritmo sirve para convertir un número en
base 10 a base 𝒉.
Lo que resta es coleccionar todos los 𝑏𝑖 en el orden que indican los índices para conformar el
número binario, por ejemplo:
242 = 2 ∙ 121 + 0, 𝑏0 = 0121 = 2 ∙ 60 + 1, 𝑏1 = 160 = 2 ∙ 30 + 0, 𝑏2 = 0 30 = 2 ∙ 15 + 1, 𝑏3 = 115 = 2 ∙ 7 + 1, 𝑏4 = 17 = 2 ∙ 3 + 1, 𝑏5 = 1
3 = 2 ∙ 1 + 1, 𝑏6 = 11 = 2 ∙ 0 + 1, 𝑏7 = 1
Entonces nuestro a partir de nuestro algoritmo podemos establecer la equivalencia que:
Unidad 2. Sistemas numéricos
UnADM | DCEIT | MT | MANU1 9
242 ≡ 111110102
Entonces a partir de estos dos casos particulares podemos generalizar que la expresión de un
entero 𝑁 en una base cualquiera 𝑏 natural se expresa como:
𝑁 = (𝑎𝑛𝑎𝑛−1𝑎𝑛−2…𝑎0)𝑏 =
2.1.2. Operaciones
En la sección anterior hemos visto como se expresan los números dentro de nuestro sistema
numérico y también dentro del sistema numérico binario. Pero esta descripción no es suficiente
ya que no son operables, es decir, necesitamos fundamentar el funcionamiento de las
operaciones de suma y producto a partir de la definición que acabamos de dar.
Sean 𝑝 y 𝑞 dos números en base 10 tal que 𝑝 ≠ 𝑞. Entonces ambos pueden ser expresados de
la siguiente forma
𝑝 = 𝑝𝑛𝑝𝑛−1…𝑝0𝑞 = 𝑞𝑚𝑞𝑚−1…𝑞0
𝑚 ≠ 𝑛
Entonces esto quiere decir que
𝑝 = 𝑝𝑛 ∙ 10𝑛 + 𝑝𝑛−1 ∙ 10
𝑛−1 +⋯+ 𝑝0 ∙ 100
𝑞 = 𝑞𝑚 ∙ 10𝑚 + 𝑞𝑚−1 ∙ 10
𝑚−1 +⋯+ 𝑞0 ∙ 100
Entonces suponiendo sin pérdida de generalidad que 𝑛 ≥ 𝑚, la suma de p y q está definida de
la siguiente manera.
𝑝 + 𝑞 = (𝑝𝑛 ∙ 10𝑛 +⋯+ 𝑝𝑚 ∙ 10
𝑚 +⋯+ 𝑝0 ∙ 100) + (𝑞𝑚 ∙ 10
𝑚 +⋯+ 𝑞0 ∙ 100)
= 𝑝𝑛 ∙ 10𝑛 +⋯+ (𝑝𝑚 + 𝑞𝑚) ∙ 10
𝑚 +⋯+ (𝑝0+𝑞0) ∙ 100
Unidad 2. Sistemas numéricos
UnADM | DCEIT | MT | MANU1 10
Para encontrar el número específico podemos usar el Algoritmo 1 descrito en la unidad
anterior, esto porque las sumas 𝑝𝑖 + 𝑞𝑖 pueden estar rebasando la base 𝑏 en la que están
expresados los coeficientes.
El Algoritmo 1 automáticamente va acumulando el resultado computado, o bien, podemos
hacer en cada una de las sumas el algoritmo que conocemos como acarreo en el que cada
posición 𝑞𝑖 del resultado conserva el resultado de (𝑞𝑖 + 𝑝𝑖)𝑚𝑜𝑑 𝑏 y se acarrea a la posición 𝑖 +
1 la parte entera (𝑝𝑖𝑠𝑜) de la división (𝑞𝑖 + 𝑏𝑖 + 𝑎𝑐𝑎𝑟𝑟𝑒𝑜)/𝑏. El algoritmo siguiente ilustra el
sistema recién descrito.
𝑎𝑐𝑎𝑟𝑟𝑒𝑜 = 0𝑟0≤𝑖≤𝑛+1 = 0𝑃𝑎𝑟𝑎 𝑖 ≔ 0…𝑛 + 1: 𝑟𝑖 = (𝑝𝑖 + 𝑞𝑖) 𝑚𝑜𝑑 𝑏 𝑎𝑐𝑎𝑟𝑟𝑒𝑜 = 𝑝𝑖𝑠𝑜((𝑝𝑖 + 𝑞𝑖 + 𝑎𝑐𝑎𝑟𝑟𝑒𝑜)/𝑏)
Algoritmo 3. Algoritmo del acarreo para la suma de números.
De la definición de suma podemos ver que cada uno de los coeficientes de los diferentes
monomios cumple (𝑝𝑖 + 𝑞𝑖) = (𝑞𝑖 + 𝑝𝑖) ya que todos son pertenecientes a un campo. En este
caso y considerando las salvedades mencionadas es fácil comprobar que
𝑝 + 𝑞 = 𝑞 + 𝑝
Si 𝑘 es un escalar, entonces 𝑘𝑝 se define como:
𝑘𝑝 = 𝑘(𝑝𝑛 ∙ 10𝑛 +⋯+ 𝑝𝑚 ∙ 10
𝑚 + 𝑝𝑚−1 ∙ 10𝑚−1 + …+ 𝑝0 ∙ 10
0)
= 𝑘𝑝𝑛 ∙ 10𝑛 +⋯+ 𝑘𝑝𝑚 ∙ 10
𝑚 + 𝑘𝑝𝑚−1 ∙ 10𝑚−1 + …+ 𝑘𝑝0 ∙ 10
0
De la misma forma podemos aplicar el Algoritmo 1 o considerar que cada multiplicación se
puede expresar como ∑ 𝑝𝑖𝑘𝑖=1 y aplicar el algoritmo del acarreo.
La asociatividad y exponenciación se pueden extender a partir de estos ejemplos y se deja
como ejercicio al lector.
Unidad 2. Sistemas numéricos
UnADM | DCEIT | MT | MANU1 11
2.2. Soluciones numéricas
2.2.1 Otros sistemas numéricos (octal, hexadecimal, base n)
Como ya dijimos, el sistema binario es el que se usa de forma nativa en todas las computadoras
digitales y dispositivos electrónicos hoy en día pero el decimal es con el que estamos muy
acostumbrados a trabajar. El sistema octal, es decir, el sistema numérico base 8, cumple con la
característica de que la conversión de un número de base 2 a uno de base 10 es muy sencilla.
En otras palabras, el sistema octal sirve como un sistema intermedio entre el de base 2 y el de
base 10.
La conversión de octal a binario se logra únicamente reemplazando el dígito en octal por su
equivalente en binario, por ejemplo
3478 → 38 ≡ 0112, 48 ≡ 1002, 78 ≡ 1112 → 111001112
Y análogamente el paso de binario a octal es equivalente con la precaución de separar el
número binario en grupos de 3 (esto se debe a que se requieren 3 posiciones para expresar en
binario todos los digititos en base 8).
101110112 → 0102 ≡ 28, 1112 ≡ 78, 0112 ≡ 38 → 2738
Es por esto que para convertir de base 10 a base 2 es más rápido convertirlo primero a octal y
después convertirlo a binario. Usaremos el ejemplo usado previamente, convertiremos el 242 a
binario pasando primero por octal, para entender el siguiente ejemplo hay que tomar en
cuenta que 1010 = 128.
242 = 28(12)82 + 48(12)8
1 + 28(12)80
Usando el primer algoritmo para convertir a binario tenemos que
Unidad 2. Sistemas numéricos
UnADM | DCEIT | MT | MANU1 12
𝑏2 ← 28𝑏1 ← 48 + 28(12)8 = 308𝑏0 ← 28 + 308(12)8 = 28 + 3608 = 3628
Entonces tenemos que:
242 = 3628 = 111100102
Otro sistema numérico que importante por mencionar es el sistema hexadecimal (base 16) ya
que al igual que el sistema octal, este se ha desarrollado a la par del desarrollo de las
computadoras y también es un sistema intermedio entre el sistema binario y el decimal.
Notacionalmente el sistema Hexadecimal se abrevia comúnmente como Hex lo que puede
indicar que el conjunto de números agrupados bajo dicha abreviatura está en hexadecimal.
Este consta de una base de 16 símbolos o dígitos que son, por convención
{0,1,2,3,4,5,6,7,8,9, 𝐴, 𝐵, 𝐶, 𝐷, 𝐸, 𝐹}
Su importancia radica en la característica de que
28 = 24+4 = 2424 = 16 ∙ 16
El extremo izquierdo de la expresión anterior representa a la unidad de memoria en una
computadora, denominada byte, y el derecho indica que se requieren dos símbolos de este
sistema para representar un byte de memoria para representar un solo byte.
Si quisiéramos convertir el número 217𝐹16 a base 10 tenemos que ocupar el mismo algoritmo
una vez más de la siguiente forma
217𝐹16 = 2 ∙ 163 + 1 ∙ 162 + 7 ∙ 161 + 15 ∙ 160
= 2 ∙ 4096 + 1 ∙ 256 + 7 ∙ 16 + 15= 8192 + 256 + 112 + 15 = 8575
Unidad 2. Sistemas numéricos
UnADM | DCEIT | MT | MANU1 13
Para convertir un número cualquier en base 𝛽1 a base 𝛽2 podemos usar el algoritmo 2 con la
siguiente salvedad, expresamos 𝛽2 en la base 𝛽1 y llevamos a cabo el algoritmo para esta
misma base 𝛽1. En cada paso, el residuo lo expresamos en base 𝛽2.
En el caso particular de los sistemas octal, hexadecimal y binario el paso entre ellas es muy
sencillo ya que 16 = 2 ∙ 8 = 24, es decir, lo que hay que hacer es agrupar de 3 en 3 para
convertir de binarios
2.2.2. Punto flotante
Hasta este momento hemos expresado números enteros pero la duda inmediata es como
expresar números no enteros. Hemos dicho en repetidas ocasiones que no todos los reales
pueden estar descritos por cuestiones de uso de recursos, esta conclusión está basada en la
siguiente descripción de números no enteros.
Los números reales son uno de los grandes logros del intelecto humano, una buena cantidad de
los resultados matemáticos están basados en la estructura de estos números. Pero como ya
hemos dicho con anterioridad no es posible representar exactamente cualquier número real
para poder efectuar cómputo con ellos, y sin embargo tenemos que hacerlo de alguna forma,
entonces lo que nos queda es encontrar y desarrollar métodos para poder representarlos, así
como redefinir las operaciones que funcionan con los números reales para que funciones con
los números que definamos.
De una forma sencilla el sistema de punto flotante guarda una gran similitud con la notación
científica. Cualquier número puede ser expresado en notación científica recorriendo el punto
decimal de tal forma que sólo quede una cifra a la izquierda del punto y el resto del número a la
derecha del mismo, todo multiplicado por la potencia de 10 necesaria para obtener el mismo
número. Por ejemplo, si el número es 1324098, en notación científica el número 𝑥 se expresa
como
𝑥 = 1.324098 × 106
Unidad 2. Sistemas numéricos
UnADM | DCEIT | MT | MANU1 14
Si el número es 0.23355 entonces el número 𝑥 equivalente en notación científica es
𝑥 = 2.3355 × 10−1
O bien si el número es 124.435 entonces el número 𝑥 equivalente es:
𝑥 = 1.24435 × 10−2
La característica de esta notación es que todos los números tienen una representación estándar
que depende de un número y su parte decimal y su valor absoluto depende de la potencia de
10 a la que esté elevado ese número.
Esta característica del sistema de punto flotante es la que más nos interesa aprovechar para
poder representar números en cualquier base.
2.3. Representación numérica
El sistema de punto flotante FL es el conjunto de todos los números 𝑓𝑙(𝑥) tal que 𝑥 ∈ ℝ se
representa de la siguiente forma:
𝑓𝑙(𝑥) = ± (𝑑0 +𝑑1𝛽1
+𝑑2𝛽2+⋯+
𝑑𝑝−1
𝛽𝑝−1) × 𝛽𝑒
(1)
Donde 𝑒 ∈ ℕ se llama exponente o característica, la secuencia de dígitos (llamada cadena de
caracteres o simplemente cadena) 𝑑𝑖 se denomina mantisa 0 ≤ 𝑑𝑖 ≤ 𝛽, Los números que
caracterizan a nuestro conjunto de punto flotante son:
𝛽 base
𝑝 precisión
[𝑒𝑀𝐼𝑁 , 𝑒𝑀𝐴𝑋] rango de exponentes
Es claro, por la definición de 𝑑𝑖 que 𝛽 es la base de nuestro sistema, a la cadena 𝑑1𝑑2…𝑑𝑝−1 se
le conoce como fracción, el exponente de nuestro número 𝑓𝑙(𝑥) toma cualquier valor en el
rango de exponentes, es decir, 𝑒𝑀𝐼𝑁 ≤ 𝑒 ≤ 𝑒𝑀𝐴𝑋, y como todo el número está en la misma base
Unidad 2. Sistemas numéricos
UnADM | DCEIT | MT | MANU1 15
este exponente indica, de la misma forma que en la notación científica, cuantos lugares se tiene
que recorrer el punto decimal hacia la izquierda en caso de ser negativo o derecha en caso
contrario. Por ejemplo, el número real 0.1 con 𝛽 = 10, 𝑝 = 6.
𝑓𝑙(0.1) = 1.00 × 10−1
Pero con 𝛽 = 2, 𝑝 = 24 obtenemos
𝑓𝑙(0.1) = 1.10011001100110011001101 × 2−4
Observa como en la misma representación del mismo número real en sistemas de punto
flotante son muy distintas, en el primero la representación es exacta y en el segundo aparece
un patrón (110011. ..) que se repite periódicamente, lo mismo sucede si quieres expresar el
0.310 en base 2 pero en base 3 la representación es exacta. También puedes observar cómo la
mantisa en ambos casos es tan grande como la precisión lo indique, y en cada dígito (𝑑𝑖) puede
ser ocupado por un número no más grande que 𝛽 − 1, p veces.
Con esta representación definida así podríamos tener el problema de que un número tenga dos
representaciones, por ejemplo, el mismo 0.1 pero con 𝛽 = 2, 𝑝 = 23 quedaría expresado como
𝑓𝑙(0.1) = 0.1100110011001100110011 × 2−3
Este puede ser un gran problema y para evitarlo se hará que 𝑑0 ≠ 0, es decir, se usa la
convención de que ningún número empiece con 0 y el resto de la fracción se usa para expresar
nuestro número. Al seguir esta convención decimos que nuestro conjunto de números está
normalizado y los números tendrán la siguiente forma:
𝑓𝑙(𝑥) = ±𝑑0. 𝑑1𝑑2…𝑑𝑝−1 × 𝛽𝑒; 0 ≤ 𝑑𝑖 ≤ 𝛽, 1 ≤ 𝑑0 ≤ 𝛽 (2)
Pero el normalizar nuestro conjunto aparece entonces un problema, el de expresar el número 0
y es que como está definido hasta este momento no es posible, dado que 𝑑0 = 1. Usaremos la
notación < 𝛽, 𝑝, 𝑒𝑀𝐼𝑁 , 𝑒𝑀𝐴𝑋 >.
La cantidad posible de exponentes en el rango [𝑒𝑀𝐼𝑁 , 𝑒𝑀𝐴𝑋] es 𝑒𝑀𝐴𝑋 − 𝑒𝑀𝐼𝑁 + 1, dentro de
nuestro sistema de punto flotante cuando no necesitamos recorrer el punto decimal. Aún
Unidad 2. Sistemas numéricos
UnADM | DCEIT | MT | MANU1 16
cuando los sistemas de punto flotante pueden ser expresados en cualquier base, las
computadoras de hoy en día usan, como ya hemos dicho, el sistema de punto flotante con base
2.
Entonces, debido a que esta de bits cantidad está fija (como mencionamos antes, esta
secuencia de dígitos se denomina palabra en una computadora) especificaremos como se
expresan estos números dentro de la palabra de tamaño 𝑁 a partir de la precisión definida para
el conjunto. Usaremos 1 bit para el signo, 𝑝 − 1 bits para la mantisa y 𝑁 − 𝑝 − 1 bits para el
exponente
|𝑠|1|𝑑1| … |𝑑𝑝−1|𝑒1|𝑒2| … |𝑒𝑁|
Propiedades
El signo puede valer 0 si el número es positivo y 1 si el número es negativo. Entonces, tomando
en cuenta todos estos elementos la cantidad de números que podemos expresar en algún
sistema de punto flotante dado es:
2(𝛽 − 1)𝛽𝑝−1(𝑒𝑀𝐴𝑋 − 𝑒𝑀𝐼𝑁 + 1) + 1 (3)
El 2 se debe al bit que reservamos para expresar el signo, el primer dígito de la mantisa de
nuestro sistema normalizado tiene (𝛽 − 1) opciones y este valor puede estar en cada una de
las 𝑝 − 1 posiciones, es por esto que lo multiplicamos por (𝛽𝑝−1) y esto lo multiplicamos por la
cantidad posible de exponentes posibles𝑒𝑀𝐴𝑋 − 𝑒𝑀𝐼𝑁 + 1, el 1 es porque reservaremos un
lugar para el número 0. La cantidad de bits que requerimos para almacenar todos los números
de algún sistema de punto flotante es:
𝑙𝑜𝑔2 (𝑒𝑀𝐴𝑋 − 𝑒𝑀𝐼𝑁 + 1) + 𝑙𝑜𝑔(𝛽𝑝) + 1 (4)
En la siguiente tabla puedes ver los valores de diferentes conjuntos de punto flotante usados en
distintos sistemas
Unidad 2. Sistemas numéricos
UnADM | DCEIT | MT | MANU1 17
Sistema 𝜷 𝒑 𝒆𝑴𝑨𝑿 𝒆𝑴𝑰𝑵
IEEE SP (precisión simple) 2 24 −126 127
IEEE DP (doble precisión) 2 53 −1,022 1,023
Supercomputadora Cray 2 48 −16,383 16,384
Calculadora HP 10 12 −499 499
IBM 370 16 6 −64 63
Tabla 1. Parámetros usados en diferentes sistemas de punto flotante, los estándares de la IEEE para SP y DP corresponder a
las arquitecturas de 32 y 64 bits respectivamente.
Como mencionamos antes debido a que el primer número siempre será distinto de cero (𝑑0 =
1) por ser un sistema normalizado, entonces no hay manera directa de expresar el cero, para
hacerlo usaremos la propiedad de que los números naturales son numerable, esto es,
incluiremos un elemento en nuestro conjunto y lo forzaremos a ser el primer elemento del
mismo para representar en el sistema representará el cero. Para lograr esto haremos que
𝑓𝑙(0) = 1.0 𝑥 𝛽𝑒𝑀𝐼𝑁−1
En la siguiente tabla puedes ver todos los números de un sistema de punto flotante de juguete
cuyos parámetros son < 2,3, −1,1 >.
𝒊 𝒔 𝒎𝒂𝒏𝒕𝒊𝒔𝒂 𝒆𝒙𝒑 𝒏𝒖𝒎𝟏𝟎
1 0 1 0 0 -1 0.5
2 0 1 0 1 -1 0.625
3 0 1 1 0 -1 0.75
4 0 1 1 1 -1 0.875
5 0 1 0 0 0 1
6 0 1 0 1 0 1.25
7 0 1 1 0 0 1.5
8 0 1 1 1 0 1.75
9 0 1 0 0 1 2
Unidad 2. Sistemas numéricos
UnADM | DCEIT | MT | MANU1 18
10 0 1 0 1 1 2.5
11 0 1 1 0 1 3
12 0 1 1 1 1 3.5
13 1 1 0 0 -1 -0.5
14 1 1 0 1 -1 -0.625
15 1 1 1 0 -1 -0.75
16 1 1 1 1 -1 -0.875
17 1 1 0 0 0 -1
18 1 1 0 1 0 -1.25
19 1 1 1 0 0 -1.5
20 1 1 1 1 0 -1.75
21 1 1 0 0 1 -2
22 1 1 0 1 1 -2.5
23 1 1 1 0 1 -3
24 1 1 1 1 1 -3.5
25 0 1 0 0 -2 0
Tabla 2. Tabla que muestra el conjunto de punto flotante para <2,3,-1,1>. En la primer columna se enumeran todos los
elementos de este conjunto, la segunda corresponde al signo, las siguientes tres a la mantisa, después el exponente y al final
su representación en base 10.
Observa cómo los 24 elementos, usualmente llamados números de máquina, son simétricos
respecto del cero, esto se debe a que el bit del signo multiplica por -1 cada uno de los valores
positivos, y también observa su distribución dentro de la recta real, es fácil observar que no
están uniformemente distribuidos.
Esto muestra que los conjuntos de punto flotante representan únicamente un subconjunto de
los números reales (en sentido estricto representan un subconjunto de los números racionales
ya que no se puede representar hasta el momento ningún irracional) y es que todos los
números de la tabla son consecutivos (el mismo ejercicio se puede realizar poniendo los
Unidad 2. Sistemas numéricos
UnADM | DCEIT | MT | MANU1 19
exponentes en representación binaria) y al transformarlos a reales nos quedan huecos.
Entonces de aquí podemos preguntarnos qué es lo que pasa si necesitamos representar alguno
de estos números o si llegamos a la frontera de nuestro sistema, es decir si alcanzamos los
valores más alto y más bajo. Estas son las razones por las que un número cualquiera 𝑥 no pueda
ser representado por un conjunto de punto flotante (FL).
Los valores más pequeño y más grande se denominan underflow level (UFL) y overflow level
(OFL), ambos se pueden encontrar de la siguiente manera.
𝑈𝐹𝐿 = 𝛽𝐿
𝑂𝐹𝐿 = 𝛽𝑒𝑀𝐴𝑋+1(1 − 𝛽−𝑝)
Para nuestro ejemplo, 𝑈𝐹𝐿 = 2−1 = 0.5 y 𝑂𝐹𝐿 = 22(1 − 2−3) = 4 ∗ 0.88 = 3.5. Cualquier
número real fuera de estos valores no puede ser representado por nuestro sistema de punto
flotante. A todos los números que excedan OFL serán representados por un valor singular
denominado 𝐼𝑁𝐹. En Octave podemos obtener este valor de la siguiente manera:
octave:1> 10e9999999
ans = Inf
octave:2>
O bien podrías diseñar un script que vaya agregando alguna cantidad predefinida h hasta
obtener Inf. Esto lo dejaremos a tu iniciativa.
Supongamos que 𝑥 está representado por 𝑓𝑙(𝑥)de forma inexacta por
𝑓𝑙(𝑥) = 𝑑. 𝑑𝑑𝑑 …𝑑 × 𝛽𝑒
Podría ocurrir que en la última cifra el dígito 𝑑𝑝−1 valga cualquier valor entre 0 y 𝛽. a estas
cifras las denominaremos ulp (unidades en el último lugar). El máximo error, es decir, cuando
no podamos decidir si 𝑓𝑙(𝑥) representa a 𝑥 o bien a 𝑥 + 1, se da si el último dígito 𝑑𝑝−1 de
𝑓𝑙(𝑥) vale 𝛽/2, Para computar el error que corresponde a . 5𝑢𝑙𝑝 tenemos que se puede
computar por (𝛽/2) 𝛽−𝑝 × 𝛽𝑒, es decir, la mitad de la base en la última posición de la mantisa.
Unidad 2. Sistemas numéricos
UnADM | DCEIT | MT | MANU1 20
Como los valores que puede tomar un número van desde 𝛽𝑒 hasta 𝛽 × 𝛽𝑒, es decir, desde la
posición en la que está el número actual hasta el número que sigue, entonces el error relativo
(que definiremos con detalle después, pero se puede entender muy fácil ya que no es otra cosa
que la diferencia de un número real 𝑥 y su representación 𝑓𝑙(𝑥) dividida por 𝑥) puede variar
entre los siguientes dos valores:
(𝛽2)𝛽−𝑝 × 𝛽𝑒
𝛽𝑒 ,
(𝛽2)𝛽−𝑝 × 𝛽𝑒
𝛽𝑒+1
Es decir, 1/2𝑢𝑙𝑝 varía por un factor 𝛽 de la siguiente forma:
1
2𝛽−𝑝 ≤
1
2𝑢𝑙𝑝 ≤
𝛽
2𝛽−𝑝
(5)
Podemos definir a 𝑒𝑝𝑠 = 𝜖𝑀𝑎𝑐ℎ = 𝛽
2𝛽−2 para poder establecer como criterio de redondeo de
un real 𝑥 al flotante 𝑓𝑙(𝑥) superior y así determinar con 𝑒𝑝𝑠 el error relativo de dicho
redondeo. En nuestro ejemplo 𝑒𝑝𝑠 = 0.125.
Entonces una característica de 𝑒𝑝𝑠 es que al sumar 𝑒𝑝𝑠 a 1 obtenemos el siguiente elemento
de nuestro conjunto:
𝑓𝑙(1 + 𝑒𝑝𝑠) > 1 (6)
Hasta el momento hemos usado la notación 𝑓𝑙(𝑥) para determinar el número de máquina que
mapea a 𝑥 pero podemos profundizar un poco más ya que es un aspecto importante a descatar,
y es que el mapeo:
𝑥 → 𝑓(𝑥)
Significa encontrar el número más cercano a 𝑥 dentro de nuestro conjunto de punto flotante
bajo las consideraciones que acabamos de mencionar, a esta operación se le conoce como
redondeo.
Unidad 2. Sistemas numéricos
UnADM | DCEIT | MT | MANU1 21
Para obtener 𝑒𝑝𝑠 del sistema con que estés trabajando puedes llevar a cabo la prueba de Moler
octave:3> a=4.0/3;
octave:4> b=a-1;
octave:5> c=b+b+b;
octave:6> eps=1-c;
octave:7> eps
eps = 2.2204e-016
octave:8>
Entonces nuestro sistema de punto flotante tiene los siguientes valores distinguibles:
0 < 𝑈𝐹𝐿 < 𝑒𝑝𝑠 < 𝑂𝐹𝐿 (7)
Otro valor importante a distinguir es lo que se obtiene si hacemos una operación como 0/0,
que es un valor que no está definido en los reales. En este caso usualmente obtenemos el valor
NaN, que significa Not a Number.
octave:9> 0/0
warning: division by zero
ans = NaN
octave:10>
Aritmética
Una vez definida la descripción numérica de nuestros conjuntos de punto flotante tenemos que
definir ahora como operar con ellos, es decir, definir la aritmética, es decir no podemos sumar
las magnitudes de los números de máquina 1.422 × 10−3 y 3.4235 × 108 ya que claramente
representan uno es muy pequeño comparado con el otro.
El modelo estándar de aritmética para operar números es el siguiente
Unidad 2. Sistemas numéricos
UnADM | DCEIT | MT | MANU1 22
𝑓𝑙(𝑥 𝑜𝑝 𝑦) ≡ (𝑥 𝑜𝑝 𝑦)(1 + 𝛿), 𝛿 ≤ 𝑒𝑝𝑠, 𝑜𝑝 = +,−,∗,/ (8)
Lo que indica este modelo es que el mapeo del resultado de la operación teórica (también se le
denomina como verdadera) de 𝑥 con 𝑦 es lo mismo que hacer la operación 𝑜𝑝 indicada para
después redondear el resultado. Este modelo de aritmética es muy usado pero una
modificación se pude hacer con el siguiente modelo
𝑓𝑙(𝑥 𝑜𝑝 𝑦) ≡𝑥 𝑜𝑝 𝑦
1 + 𝛿, 𝛿 ≤ 𝑒𝑝𝑠
En el caso de la suma o resta lo primero que tenemos que considerar al sumar dos números
dentro de nuestro sistema de punto flotante es que los exponentes estén alineados, es decir,
ambos tienen el mismo exponente, lo que significa desnormalizar los números para después
realizar la operación eliminando los dígitos menos significativos considerando la precisión 𝑝 del
sistema. Ejemplo, si 𝑥, 𝑦 ∈ 𝐹𝐿<10,6,−1,2>
𝑥 = 1.92403 × 102
𝑦 = 6.35782 × 10−1
𝑥 + 𝑦 = 192.403 + 0.635782 = 193.038782 = 1.93039 × 102
En el caso de la multiplicación únicamente tenemos que sumar los exponentes con
complemento a 2 y se multiplican las mantisas haciendo el redondeo al final como lo indica el
modelo estándar de aritmética.
El caso de la división es el mismo, si el resultado no cae dentro del conjunto tiene que ser
redondeado una vez obtenido el número.
Unidad 2. Sistemas numéricos
UnADM | DCEIT | MT | MANU1 23
2.3.1 Método del punto fijo
En esta asignatura vamos a lidiar con pasar de resultados teóricos posibles a su implementación
concreta, a tener que encontrar el número específico que satisface alguna ecuación y esto se
puede hacer ya sea encontrándolo en papel o bien usando una computadora. Las
computadoras, como ya hemos dicho, no cuentan con una fuente infinita de recursos y los
números en particular hay que guardarlos en algún lugar específico. Aunque los ingenieros en
electrónica y físicos pueden diseñar la tecnología para hacer esto lo que necesitamos es
trabajar en un modelo que se pueda implementar y que funcione con estas restricciones.
La representación de números en el sistema posicional base 10 se hace como hemos visto,
basada en potencias de 10 que determinan la posición de cada uno de los coeficientes.
Pero podemos deshacernos de cada potencia de 10 (o base n cualquiera) y ubicar a cada uno de
los coeficientes en una posición distinta, identificando cada posición o casilla como uno de las
diferentes potencias de la base en la que estemos hablando.
Si estamos hablando de un sistema con base 2 a cada casilla se le llama bit y los coeficientes
pueden ser cualquier valor entre {0,1}. A través de un cambio de base podemos mapear un
número entero cualquiera con un número binario cualquiera, pero aún sin este algoritmo el
mapeo es bastante intuitivo
010 → 02
110 → 12
210 → 102
310 → 112
⋮
910 → 10012
1010 → 10102
Unidad 2. Sistemas numéricos
UnADM | DCEIT | MT | MANU1 24
El método de punto fijo especifica como mapear naturales entre binarios cuando tenemos una
restricción de espacio. Como ya hemos mencionado la cantidad de bits continua se denomina
palabra, las computadoras hoy en día usan palabras de 32 bits, es decir, tienen registros donde
pueden guardar 32 1’s seguidos, una forma de representar naturales es con la convención signo
y magnitud, donde reservamos 1 bit para el signo y 𝑛 − 1 bits restantes para la magnitud del
número.
𝑠|𝑑0|𝑑1|… |𝑑𝑛−1
Por ejemplo, si la palabra tiene es de 8 bits y queremos representar 8 y -8 la representación en
bits es
+810 = 00001000
−810 = 10001000
Pero los algoritmos para operar con esta convención tienen un gran inconveniente y es la
representación del neutro aditivo
0 = 000000002 = 100000002
Una alternativa para representar números negativos es usar el complemento a 2, que a su vez
usa complemento a 1, así que veremos primero el complemento a 1 de un número.
El complemento a 1 de un número 𝑥2 con 𝑟 dígitos en base 2 se obtiene
𝐶1(𝑥2) = 𝑟2 − 𝑥2
donde 𝑟2 = 11…1 r veces, es decir, es toda la palabra con los bits ocupados en 1.
En el sistema binario esto se traduce de la siguiente forma, si queremos complementar a 1 el
número 810 con una palabra de 8 bits entonces
Unidad 2. Sistemas numéricos
UnADM | DCEIT | MT | MANU1 25
𝐶1(810) = 𝐶1(000010002) = 111111112 − 000010002 = 111101112
Si queremos complementar a 1 el 1010 o el −1010 obtenemos:
𝐶1(1010) = 𝐶1(000010102) = 111111112 − 000010102 = 111101012
𝐶1(−1010) = 𝐶1(111101012) = 000010102
Lo que divide el dominio en dos partes, todos aquellos con el primer bit con 1 serán los
números negativos y con 0 serán los positivos, como se puede ver al sumar 111101012 +
000010102 obtenemos 0.
El complemento a 2 es simplemente sumar 1 al complemento a 1 del número 𝑥2 es decir,
𝐶2(𝑥2) = 𝐶1(𝑥2) + 12
Lo primero que hay que notar es el término 𝐶1(𝑥2) es hacer primero el complemento a 1 el
número 𝑥2 y luego sumar 12, en nuestro ejemplo:
𝐶2(1010) = 𝐶2(000010102) = 000010102 + 12 = 111101012
𝐶2(−1010) = 𝐶2(111101012) = 000010102
En el complemento a 2 tenemos que aumentar un bit en el extremo izquierdo para determinar
cuándo obtenemos un desborde en el caso de sumar un número no soportado por el sistema.
Estas técnicas de sumas nos servirán para trabajar con números en el sistema de punto fijo.
Hasta el momento sólo hemos hablado de representar enteros en un arreglo de bits, pero cómo
hacemos para representar racionales. Esto lo podemos hacer dividiendo nuestra palabra en dos
partes, una para la parte entera y otra para la fraccionaria. Por ejemplo, si nuestra palabra es de
Unidad 2. Sistemas numéricos
UnADM | DCEIT | MT | MANU1 26
16 bits entonces podemos especificar los primeros 8 bits para la parte entera y los siguientes
para la fraccionaria.
27 26 25 24 23 22 21 20⏟ 27 26 25 24 23 22 21 20⏟
1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8
Por ejemplo, con esta convención, el número 01001101010000112 ≡ 77.6710 o bien el
número 10011011010101102 ≡ −100.162. Entonces salta a la vista que las operaciones se
hacen sobre la palabra completa, operando como un entero cualquiera y el punto decimal se
puede establecer después.
El inconveniente de esta notación es su poca flexibilidad para representar una gran gama de
números donde los exponentes ocupan más valores que los permitidos por el segmento de la
palabra asignado para ellos.
2.3.2. Fuentes de error
Hemos definido el conjunto y las operaciones aritméticas de nuestro conjunto de punto
flotante, pero no es lo único en lo que debemos fijarnos ya que al estar trabajando con
aritmética finita de punto flotante es inevitable el tener que redondear, no todos los elementos
en los Reales pueden ser representados entonces algunos elementos son redondeados dentro
de nuestro conjunto de punto flotante, desde este preciso momento estamos induciendo
errores. Acotar estos errores es importante para obtener cálculos representativos de los
resultados teóricos.
El redondeo es una fuente de errores otra es la incerteza de los datos, esos se pueden obtener
a partir de
a) Medición
b) Almacenamiento de la información
c) Acarreo de cómputos previos.
Unidad 2. Sistemas numéricos
UnADM | DCEIT | MT | MANU1 27
2.3.3. Tipos de error
El análisis de los errores en los diferentes métodos usados es una tarea fundamental para el
análisis numérico, en esta sección veremos una introducción al análisis del error y como
acotarlo. Para poder hablar de error estamos obligados a hablar con respecto a que es ese
error, entonces es necesario establecer un marco de referencia. A la función original que
mapea a los reales en los reales la denotaremos como usualmente lo hacemos
𝑓:ℝ → ℝ
Al método que la aproxima o computa la denotaremos por
𝑓
Cuando el dato es el número real o la entrada teórica la denominaremos
𝑥
En oposición a un dato aproximado, resultado de ruido o redondeo, o bien por resultado de un
cómputo que denotaremos
�̂� = 𝑥 + ℎ
Entonces nuestro resultado deseado, teórico lo denotamos por
𝑓(𝑥)
que es la forma usual de hacerlo y nuestro resultado aproximado, que nos denota sobre que
exactamente estamos computando, lo denotaremos por
𝑓(�̂�) = 𝑓(𝑥 + ℎ)
Pero si trabajamos con un método sobre los datos aproximados tendremos que escribir
𝑓(�̂�)
La pregunta salta a la vista ¿cuál es el error ocasionado por este cómputo? La respuesta es
bastante directa, tenemos que sacar la distancia entre lo computado y lo esperado.
Unidad 2. Sistemas numéricos
UnADM | DCEIT | MT | MANU1 28
𝐸𝑟𝑟𝑜𝑟 𝑇𝑜𝑡𝑎𝑙 = 𝑓(�̂�) − 𝑓(𝑥)
Donde el primer término es el error computacional, es decir, el error por usar métodos
aproximados y el segundo término es el que obtenemos por usar datos ruidosos o sujetos a
cómputos, es decir, el error de propagación de los datos. Entonces podemos reexpresar el
error total por:
𝐸𝑟𝑟𝑜𝑟 𝑇𝑜𝑡𝑎𝑙 = (𝑓(�̂�) − 𝑓(�̂�))⏟ 𝑐𝑜𝑚𝑝𝑢𝑡𝑎𝑐𝑖𝑜𝑛𝑎𝑙
− (𝑓(�̂�) − 𝑓(𝑥))⏟ 𝑑𝑎𝑡𝑜𝑠
Esto nos dice que el error que se va induciendo en los datos tiene un efecto en el cómputo, con
o sin método aproximado pero el método no influye sobre el error en los datos. Nuestro
principal interés es sobre el error computacional debido a que es lo que depende más de
nuestra elección.
Los errores asociados al error computacional se pueden subdividir en dos tipos:
1) Redondeo
2) Truncamiento:
El error por redondeo como hemos visto se debe al mapeo implícito en el modelo números de
máquina y a la aritmética sobre estos números. Al tener que escoger 𝑓𝑙(𝑥) más cercano a 𝑥
estamos redondeando el resultado.
Los errores por truncamiento se dan comúnmente por el método escogido para mapear un
número, el ejemplo típico con el polinomio de Taylor, cuando escogemos cuantos términos de
nuestra serie de Taylor representa nuestra función entonces estamos truncando todas los
posibles refinamientos subsecuentes. Es decir, los errores por truncamiento sin inherentes al
método de cómputo escogido, usualmente es algún parámetro en el algoritmo el que
determina la cantidad de iteraciones que se aproxima el resultado.
Unidad 2. Sistemas numéricos
UnADM | DCEIT | MT | MANU1 29
La manera en la que podemos cuantificar el error que claramente depende de que tanto se
desvía el valor computado del teórico, a ese valor le llamamos error absoluto y se define por
𝐸𝑟𝑟𝑎𝑏𝑠 = |𝑓(𝑥) − 𝑓(�̂�)| (9)
El error relativo es simplemente la proporción que representa este error del valor original.
𝐸𝑟𝑟𝑟𝑒𝑙 =𝐸𝑟𝑟𝑎𝑏𝑠𝑓(𝑥)
(10)
2.3.4. Estabilidad numérica
La propagación de errores es inevitable cuando estamos trabajando con el elemento que mejor
representa un real, es decir, al elegir número de nuestro conjunto de punto flotante para
representar uno o más reales la propagación de errores es algo que inexorablemente sucederá.
Entonces para poder medir y entender esta propagación de errores hay dos conceptos que nos
serán útiles, estos son el condicionamiento y la estabilidad. El condicionamiento de una
función 𝑓(𝑥) se usa para describir la sensibilidad del valor de una función a cambios en su
argumento. En pocas palabras queremos ver que tan sensible es una función a los cambios en
el argumento o bien, que tan sensibles es el resultado del cómputo de una función (valores
𝑓(𝑥)) respecto de los datos de entrada (valores 𝑥). El condicionamiento de un problema es un
número asociado a los datos.
Decimos que un problema está bien condicionado si una perturbación o cambio en los datos
de entrada causa un cambio de magnitud proporcional en su resultado, esto lo podemos
cuantificar usando los tipos de error que recién vimos. En un sentido complementario decimos
que un problema está mal condicionado si un pequeño cambio en la entrada produce un
cambio desproporcionado o grande en el resultado. El condicionamiento depende únicamente
Unidad 2. Sistemas numéricos
UnADM | DCEIT | MT | MANU1 30
de los datos y no del algoritmo. En general, mientras más alto el valor del condicionamiento,
más mal condicionado estará un problema.
Formalmente lo definimos el condicionamiento 𝐶𝑜𝑛𝑑 o bien 𝜅 como:
𝐶𝑜𝑛𝑑 =|𝑒𝑟𝑟𝑜𝑟 𝑟𝑒𝑙𝑎𝑡𝑖𝑣𝑜 𝑑𝑒 𝑠𝑜𝑙𝑢𝑐𝑖ó𝑛 |
|𝑒𝑟𝑟𝑜𝑟 𝑟𝑒𝑙𝑎𝑡𝑖𝑣𝑜 𝑑𝑒 𝑑𝑎𝑡𝑜𝑠|=|(𝑓(�̂�) − 𝑓(𝑥))/𝑓(𝑥)|
|(�̂� − 𝑥)/𝑥|
(11)
Al numerador, es decir, a la medida del error en el cómputo de la función respecto del cálculo
teórico también se le conoce como propagación del error relativo hacia delante.
|𝑓(�̂�) − 𝑓(𝑥)
𝑓(𝑥)|
(12)
Al denominador, es decir, a la medida del error en los datos se le conoce como propagación del
error relativo hacia atrás.
|�̂� − 𝑥
𝑥|
(13)
Para entender el condicionamiento vamos a considerar que el error hacia atrás es pequeño, es
decir, vamos a analizar el condicionamiento cuando la variación en los datos es pequeña. Un
problema bien condicionado es aquel en el que 𝜅 ≈ 1, esto se logra cuando el denominador y
numerador son casi iguales, y guarda un perfecto sentido con nuestra descripción de
condicionamiento ya que implica que el cambio relativo en la solución es aproximadamente
similar al cambio relativo en la entrada de datos.
Si en cambio tenemos un condicionamiento mucho mayor a 1 quiere decir que el error relativo
en el cómputo de la solución, es decir, en el error hacia delante, fue mucho mayor al error
relativo en los datos, y este es el caso que nos interesa. Cuando nuestro condicionamiento sea
mucho mayor a 1 querrá decir que nuestro problema (función) está mal condicionado.
Unidad 2. Sistemas numéricos
UnADM | DCEIT | MT | MANU1 31
Figura 1. Figura que ilustra el proceso de cómputo y cálculo teórico de una función así como la propagación del error hacia
delante (función computada y teórica) y el error hacia atrás (error en los datos)
Suponiendo que 𝑓 es diferenciable y desarrollando un poco el extremo derecho de la expresión
anterior vemos que obtenemos:
𝐶𝑜𝑛𝑑 = |𝑥(𝑓(𝑥 + ℎ) − 𝑓(𝑥))
ℎ𝑓(𝑥)|
De nuestras lecciones de cálculo recordamos que
𝑓(𝑥 + ℎ) − 𝑓(𝑥) ≈ ℎ𝑓′(𝑥)
Entonces reescribiendo (11) tenemos que
𝐶𝑜𝑛𝑑 = |𝑥𝑓′(𝑥)
𝑓(𝑥)|
(14)
Ejemplo
Considera la función 𝑓(𝑥) = √𝑥. ¿Cuál es el condicionamiento de 𝑓(𝑥)? Sabemos que 𝑓′(𝑥) =
1
2√𝑥, entonces el condicionamiento de esta función es
𝜅 = |𝑥𝑓′(𝑥)
𝑓(𝑥)| = |
𝑥
2√𝑥
√𝑥| =
1
2
Unidad 2. Sistemas numéricos
UnADM | DCEIT | MT | MANU1 32
Este tipo de condicionamiento específico es muy bueno porque es menor a 1 y aparte es
independiente de 𝑥.
Ejemplo
Considera la función
𝑓(𝑥) =10
1 − 𝑥2
su derivada es:
𝑓′(𝑥) =20𝑥
(1 − 𝑥2)2
por lo tanto 𝜅 para esta función es
𝜅 = |𝑓′(𝑥)𝑥
𝑓(𝑥)| = |
[20𝑥
(1 − 𝑥2)2] 𝑥
101 − 𝑥2
| =2𝑥2
|1 − 𝑥2|
Que como puedes ver depende del valor de |𝑥|. Esto es, conforme |𝑥| vaya creciendo, el
condicionamiento de 𝑓(𝑥) también lo hará.
La estabilidad es un concepto asociado a la sensibilidad numérica y al acarreo de errores
involucrados en el cómputo de 𝑓(𝑥), es decir, es una medida asociada al algoritmo específico
con el que se trabaje.
Decimos que un algoritmo es inestable si en cada paso involucrado la acumulación del error
crece demasiado. Es estable en caso contrario. Es fácil suponer que para determinar la
estabilidad de un algoritmo tenemos que hacer uso del condicionamiento ya que queremos ver
la propagación del error en cada paso del mismo.
Determinar la estabilidad de algún método o algoritmo suele ser muy trabajoso y requiere una
buena cantidad de experiencia matemática ya que se tiene que poner especial atención en cada
Unidad 2. Sistemas numéricos
UnADM | DCEIT | MT | MANU1 33
paso del algoritmo analizando la propagación de errores y cuidando el condicionamiento en
cada paso.
Ejemplo.
Considera la ecuación
𝑎𝑥2 + 𝑏𝑥 + 𝑐 = 0
Como bien sabes, la solución a esta ecuación cuadrática está dada por
𝑥1 =−𝑏 + √𝑏2 − 4𝑎𝑐
2𝑎
𝑥2 =−𝑏 − √𝑏2 − 4𝑎𝑐
2𝑎
(15)
El cómputo de los valores planteados en (15) implica la implemenntación de un algoritmo en el
que se tienen que calcular en algún orden distintos factores como son 2𝑎, √𝑏2 − 4𝑎𝑐 y – 𝑏 para
después operar con ellos. Pero así de ingenua como es esta fórmula puede acarrear una gran
cantidad de errores numéricos, sobre todo cuando las dimensiones de nuestros coeficientes
son muy dispares o simplemente muy grandes.
En el caso de que sean muy grandes entonces 𝑏2 o 4𝑎𝑐 podrían alcanzar los valores de 𝑂𝐹𝐿 o
incluso 𝑈𝐹𝐿 si 𝑏 ≪ 1. Esto se puede solucionar dividiendo entre el más grande, pero un caso
más interesante es cuando tenemos que computar el valor de – 𝑏 ± √𝑑.
Al efectuar la resta entre dos valores cuyas magnitudes están sujetas a ajustes por redondeo
puede darse un fenómeno conocido como cancelación catastrófica en el que la información
que proveen los dígitos en las posiciones menos significativas de la mantisa se pierde debido al
redondeo.
Unidad 2. Sistemas numéricos
UnADM | DCEIT | MT | MANU1 34
Considera el caso cuando 𝑎 = 0.05010, 𝑏 = −98.78, 𝑐 = 5.015. Las raíces correctas para este
caso redondeadas a 10 cifras son:
𝑥1 = 1971.605916
𝑥2 = 0.050770694
Pero con una precisión de 4 cifras significativas obtenemos que
√𝑏2 − 4𝑎𝑐 = 98.77
𝑏 = 98.78
Por lo tanto, la operación – 𝑏 ± √𝑏2 − 4𝑎𝑐 = 98.78 ± 98.77 = 1972, 0.099. Es claro que el
error cometido en la segunda raíz es inmenso, esto se debe a los pequeños errores que se
fueron acumulando en el proceso del cálculo de las raíces y donde las cifras menos significativas
se fueron redondeando, acumulando así un error relativo inmenso al final. Para acotar este
error tomamos la consideración en el que podríamos obtener cancelación catastrófica.
Considerando el caso cuando 𝑏2 ≫ 𝑎𝑐 y 𝑏 > 0 podemos multiplicar (15) por – 𝑏 − √𝑏2 − 4𝑎𝑐
en el numerador y denominador obtenemos la siguiente expresión
𝑥1 =2𝑐
−𝑏 − √𝑏2 − 4𝑎𝑐
𝑥2 =2𝑐
−𝑏 + √𝑏2 − 4𝑎𝑐
(16)
De esta forma las raíces de nuestro polinomio serán (16). 𝑥1, (15). 𝑥2. En cambio, si 𝑏 < 0 las
raíces que nos dan el resultado serán (15). 𝑥1, (16). 𝑥2. Para nuestro particular ejemplo
nuestras raíces toman los siguientes valores numéricos.
𝑥1,2 = 1972, 0.051
Como podrás ver se requieren hacer muchas consideraciones para determinar la estabilidad de
un sistema, así como para proponer un algoritmo más estable. Heurísticamente lo que tiene
que hacer alguien que diseña algún método numérico es seguir los siguientes consejos:
Unidad 2. Sistemas numéricos
UnADM | DCEIT | MT | MANU1 35
1) Evitar hacer restas de cantidades que estén acarreando errores a lo largo del método.
2) Evaluar y evitar llegar a los valores 𝑈𝐹𝐿 o 𝑂𝐹𝐿.
3) Usar transformaciones bien condicionadas del problema.
4) Para calcular acarreos es preferible usar la expresión 𝑛𝑣𝑎𝑙 = 𝑛𝑣𝑎𝑙 + 𝑖𝑛𝑐𝑟𝑒𝑚𝑒𝑛𝑡𝑜
5) Usar expresiones matemáticas equivalentes que no necesariamente sean
numéricamente equivalentes, por ejemplo, el cálculo de la ecuación de segundo grado
que acabamos de ver ya que la solución original (15) tal como está planteada es más
inestable que al hacer las consideraciones tomadas en (16).
6) Minimizar la magnitud de cantidades temporales intermedias muy grandes. Esto quiere
decir que si alguna cantidad intermedia interviene directamente en el cómputo del
resultado final y su tamaño relativo respecto del resultado es muy grande puede ser la
causa de redondeos muy grandes.
Unidad 2. Sistemas numéricos
UnADM | DCEIT | MT | MANU1 36
Cierre de la unidad
En esta unidad hemos discutido una de las bases más importantes entre la matemática que
algunos llaman pura y la aplicada: La necesidad de representar de alguna manera los elementos
del conjunto de los reales y el error que esto conlleva. También has aprendido algunas formas
de medir el error entre los resultados teóricos y los numéricos. Y has aprendido las bases del
análisis de estabilidad numérica de algoritmos, así como heurísticas para diseñar algoritmos
estables. Estas bases son fundamentales para el entendimiento de esta asignatura y
representan un punto de vista distinto a la inmaculada concepción de la pureza de las
matemáticas contrastado contra la necesidad y pragmatismo de encontrar números específicos
a problemas planteados.
Para saber más:
"Lorenz equation" (2013, March 22). PlanetMath.org. Freely available at
https://planetmath.org/LorenzEquation
"Numerical Computation Guide" (2013, Enero 24) Sun Microsystems, Inc. Available at
http://docs.oracle.com/cd/E19957-01/806-3568/ncgTOC.html
"IEEE floating point". (2013, January 24). In Wikipedia, The Free Encyclopedia. Retrieved 07:52,
January 25, 2013, from
http://en.wikipedia.org/w/index.php?title=IEEE_floating_point&oldid=534677145
"Relación de indeterminación de Heisenberg". (2013, 24 de enero). Wikipedia, La enciclopedia
libre. Fecha de consulta: 08:01, enero 25, 2013 desde
http://es.wikipedia.org/w/index.php?title=Relaci%C3%B3n_de_indeterminaci%C3%B3n
_de_Heisenberg&oldid=63246345
"Binary, Ternary, Octal, Duodecimal, Hexadecimal Systems, Base Conversion" (2013, January
24) In Interactive Mathematics Miscellany and Puzzles Accessed 25 January 2013.
Available at http://www.cut-the-knot.org/binary.shtml
Unidad 2. Sistemas numéricos
UnADM | DCEIT | MT | MANU1 37
Referencias Bibliográficas
Burden, R. (2011) Análisis numérico (7ª edición) México: Cengage Learning.
Mathews, J., Fink, K. (2000). Métodos Numéricos con MATLAB. (3ª edición) Madrid, España.
Prentince Hall.
Villatoro, F,R. et al. (2002). Aritmética flotante y análisis de errores. Recuperado de:
http://www.lcc.uma.es/~villa/tn/tema02.pdf
Concepto de Estabilidad Numérica - Cálculo de errores. (2015) [en línea]. Disponible en:
https://www.youtube.com/watch?v=asjsFpd6uqg
Métodos numéricos, análisis de errores. (2015) [en línea]. Disponible en:
https://www.youtube.com/watch?v=zbSi5ywDCls
Jiménez López, V. Pallarés Ruiz, A. (s.f.) Métodos numéricos. Recuperado de:
http://www.um.es/docencia/vjimenez/ficheros/textos/metodosnumericos.pdf