Documentos de Académico
Documentos de Profesional
Documentos de Cultura
de errores
Representación de datos en las computadoras binarias:
• Texto: se emplea un mapeo que relaciona la cadena de bits con los caracteres
utilizados. El texto en código ASCII utiliza un byte por carácter, pero también
existen caracteres de 2 y 4 bytes, empleados bajo los códigos de caracteres
Unicode.
Nota: El código ASCII estándar emplea cadenas de 7 bits, por lo que sólo admite 128 caracteres del idioma inglés. Existe un
código ASCII extendido de 8 bits que admite hasta 256 caracteres, pero el conjunto extendido (del 128 al 255) no es estándar en
todas las plataformas, pudiendo soportar pocos idiomas. Por ello, se recomienda limitar su uso para almacenar textos en inglés y
archivos de datos numéricos almacenados en forma de texto.
Números enteros
1 1 1 0 1 0 0 1 0 1 0 1 0 1 0 0 = -5451
2 bytes, 16bits, 65536 combinaciones. Tipos short int y unsigned short int. Rango soportado: -32768 a 32767
(0 a 65535 sin signo).
0 1 0 1 0 1 1 0 1 1 1 0 0 1 0 1 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 = 8693610
4 bytes, 32bits, 4294967296 combinaciones. Tipos int y unsigned int. Rango soportado: -2147483648 a
2147483647 (0 a 4294967295 sin signo).
0 1 0 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 1 1 0 1 0 1 0 0 1 0 1
Exponente Mantisa
Tipos de datos estándar de punto flotante:
0 1 0 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 1 1 0 1 0 1 0 0 1 0 1
4 bytes: 1 bit para signo, 8 bits en exponente y 23 bits en la mantisa (tipo float o single), 10 cifras significativas
de precisión. Rango soportado: -1.701411733e±38 a 3.402823466e±38 .
0 1 0 1 0 1 1 0 1 1 1 0 0 1 0 1 0 0 1 0 0 0 0 0 1 1 1 0 0 1 1 1 0 1 0 1 0 1 1 0 1 1 1 0 0 1 0 1 0 0 1 0 0 0 0 0 1 1 1 0 0 1 1 1
8 bytes: 1 bit para signo, 11 bits en exponente y 52 bits en la mantisa (tipo double), 16 cifras significativas de
precisión. Rango soportado: -2.2250738585072014e±308, 1.7976931348623158e±308.
Nota importante: Los conjuntos de números enteros y números reales son infinitos,
pero el espacio en las computadoras no lo es. Por ello sólo es posible representar de
manera exacta un subconjunto pequeño de números.
En el caso particular de la representación de punto flotante, la cantidad limitada de
cifras significativas que almacena da origen a dos tipos de errores cuando se realizan
operaciones aritméticas con ellos:
Además de esos dos tipos errores, existe un tercer tipo de error numérico, que
llamaremos error de truncamiento. Este tipo de error no tiene nada que ver con la
representación de punto flotante, sino con el procedimiento de cálculo utilizado.
Error de corte
Este error tiene su origen en los circuitos lógicos del procesador, concretamente en la
unidad aritmética. Se produce por la pérdida de dígitos al sumar o restar cantidades
de diferente orden de magnitud.
Para poder sumar dos números de punto flotante, ambos exponentes deben ser
iguales. Eso significa que los puntos decimales de ambas cantidades deben alinearse:
2.953124821814567E+03
+ 1.296458412832358E-04
Se transforma en
2.953124821814567E+03
+ 0.00000001296458412832358E+03
La pérdida de cifras significativas aumenta a la par de la diferencia que haya entre los
exponentes de los operandos. Existe una diferencia en la cual el error de corte es de
tal magnitud, que se tiene una pérdida total de cifras
2.953124821814567E+07
+ 1.296458412832358E-08
Al operar
2.953124821814567E+07
+ 0.0000000000000001296458412832358E+07
1+EPS > 1
#include <stdio.h>
int main(void)
{
double EPS=1.0;
int cont=0;
while((1.0+EPS)>1.0){
EPS /= 2.0;
cont++;
}
EPS *= 2.0;
cont--;
Una vez que se obtiene un resultado de la unidad aritmética del procesador, dicho
resultado es transferido a la memoria para su almacenamiento. El número de bits
utilizado para almacenar el resultado en la RAM no siempre es igual al de la unidad
aritmética, por lo que dicho resultado debe redondearse al más cercano que se pueda
representar.
Pero si la variable que lo almacena en la RAM está declarada como float (4 bytes, 10
cifras), se deberá redondear al número más cercano posible
2.953124822E+05
Error de redondeo
2.953124821814567E+05 → 295312.4821814567
2.953124821814567E+09 → 2953124821.814567
2.953124821814567E+13 → 29531248218145.67