punto_flotante
Diferencias
Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
punto_flotante [2020/03/25 03:44] – [Representación de Punto Flotante] charly | punto_flotante [2021/11/09 16:58] (actual) – editor externo 127.0.0.1 | ||
---|---|---|---|
Línea 58: | Línea 58: | ||
Notar que el número debe tener un solo dígito distinto de cero en la parte entera. Esto implica que el cero no es un número normalizado, | Notar que el número debe tener un solo dígito distinto de cero en la parte entera. Esto implica que el cero no es un número normalizado, | ||
- | Por ejemplo el número no normalizado | + | Por ejemplo el número no normalizado |
Consideraremos mantisa solamente a los dígitos binarios de la parte fraccionaria del número normalizado, | Consideraremos mantisa solamente a los dígitos binarios de la parte fraccionaria del número normalizado, | ||
Línea 91: | Línea 91: | ||
|signo (1 bit)|exponente (8 bits)|mantisa normalizada (23 bits)| | |signo (1 bit)|exponente (8 bits)|mantisa normalizada (23 bits)| | ||
+ | |||
Veamos cómo codificar un número cualquiera en Punto Flotante de precisión simple, por ejemplo: **534,5**. | Veamos cómo codificar un número cualquiera en Punto Flotante de precisión simple, por ejemplo: **534,5**. | ||
+ | - En primer lugar debemos expresarlo como un número binario normalizado. Aplicando divisiones sucesivas y multiplicaciones sucesivas por 2 obtenemos que | ||
+ | 534, | ||
+ | - Como la parte entera es mayor a 1, debemos normalizarlo. En este caso alcanza con dividirlo 9 veces por 2 para que solo quede un uno en la parte entera. Luego 534,510 = 1000010110, | ||
+ | - Como el número es positivo, el bit de signo será s = 0. | ||
+ | - Codificamos el exponente 9 en **exceso-127**: | ||
+ | - Finalmente en los 23 bits de la mantisa se almacenan los dígitos de la parte fraccionaria, | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Dado que la representación de PF de 32 bits ocupa 4 bytes, es frecuente expresar el contenido de estos 4 bytes de manera más compacta en hexadecimal, | ||
+ | |||
+ | En este caso los bits | ||
+ | '' | ||
+ | se pueden expresar en hexadecimal de la siguiente manera: | ||
+ | '' | ||
+ | |||
+ | ==== Decodificar un número de Punto Flotante de precisión simple ==== | ||
+ | Suponiendo que obtenemos de la memoria 4 bytes que contienen un número real representado en punto flotante de precisión simple, podemos extraer el número que contiene siguiendo los pasos inversos. | ||
+ | |||
+ | Si el contenido de estos cuatro bytes expresado en hexadecimal es | ||
+ | |||
+ | '' | ||
+ | |||
+ | Debemos pasarlo a binario para poder extraer el signo, el exponente y la mantisa: | ||
+ | |||
+ | '' | ||
+ | |||
+ | - Separando las partes quedará {{: | ||
+ | - Como s=1, vemos que el número es **negativo**.\\ <color # | ||
+ | - Como el exponente está codificado en exceso 127, podemos restarle 127 para obtener el exponente real: | ||
+ | - 01111100< | ||
+ | - e = 124 - 127 = **-3**\\ <color # | ||
+ | - Podemos expresar el número binario normalizado reemplazando cada una de las partes\\ | ||
+ | - f = (s) 1,m × 2< | ||
+ | - Desnormalizándolo queda: f = **-0, | ||
+ | - Finalmente el valor del número de punto flotante expresado en decimal será\\ f = -0, | ||
+ | |||
+ | ==== Consideraciones sobre la operación con números de punto flotante ==== | ||
+ | Al tratarse de una representación finita de un conjunto infinito, hay que tener en cuenta que tanto la representación de números como las operaciones de punto flotante involucran un error en la mayoría de los casos. | ||
+ | Esto puede provocar situaciones como la siguiente, por ejemplo en Python: | ||
+ | >>> | ||
+ | False | ||
+ | |||
+ | {{youtube> | ||
+ | |||
+ | Notar que la representación binaria de 0,1 requiere infinitos dígitos, por lo que el valor representado como '' | ||
+ | |||
+ | >>> | ||
+ | ' | ||
+ | |||
+ | Esto sugiere que en muchos casos será un error comparar números de punto flotante usando la igualdad. | ||
+ | |||
+ | Además del error involucrado en la representación, | ||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | {{youtube> | ||
+ | **Normalización | ||
+ | |||
+ | ---- | ||
+ | |||
+ | {{youtube> | ||
+ | **Punto Flotante** | ||
+ | |||
+ | ==== Referencias ==== | ||
+ | * Tanenbaum - Apéndice B | ||
+ | |||
+ | --- // | ||
+ | |||
+ | ~~NOCACHE~~ | ||
+ | ({{counter|total}}) | ||
×
iphelper toolbox
you see this when javscript or css is not working correct
Untested
punto_flotante.1585107850.txt.gz · Última modificación: 2020/03/25 03:44 por charly