performance - representar - Números desnormalizados-Punto flotante IEEE 754
que es coma flotante en informatica (1)
Esencialmente, un flotador desnormalizado tiene la capacidad de representar el número MÁS PEQUEÑO (en magnitud) que se puede representar con cualquier valor de coma flotante.
Eso es correcto.
el uso de números desnormalizados tiene un costo de rendimiento en muchas plataformas
La penalización es diferente en diferentes procesadores, pero puede ser de hasta 2 órdenes de magnitud. ¿La razón? Lo mismo que para este consejo:
uno debe "evitar la superposición entre números normalizados y desnormalizados"
Aquí está la clave: los denormales son un "micro-formato" de punto fijo dentro del formato de coma flotante IEEE-754 . En números normales, el exponente indica la posición del punto binario. Los números denormales contienen los últimos 52 bits en la notación de punto fijo con un exponente de 2 -1074 para los dobles.
Entonces, los denormales son lentos porque requieren un manejo especial. En la práctica, ocurren muy raramente, y a los fabricantes de chips no les gusta gastar demasiados recursos valiosos en casos raros.
Mezclar denormales con normales es lento porque entonces estás mezclando formatos y tienes el paso adicional de convertir entre los dos.
Supongo que sigo teniendo la impresión de que el uso de números desnormalizados no es bueno en la mayoría de los casos.
Los denormales se crearon con un objetivo principal: desbordamiento gradual . Es una forma de mantener pequeña la diferencia relativa entre los pequeños números. Si va directamente desde el número normal más pequeño hasta cero ( subdesbordamiento abrupto ), el cambio relativo es infinito. Si va a denormales en subdesbordamiento, el cambio relativo aún no es del todo exacto, pero al menos más razonable. Y esa diferencia aparece en los cálculos.
Para decirlo de otra manera. Los números de coma flotante no se distribuyen uniformemente. Siempre hay la misma cantidad de números entre potencias sucesivas de dos: 2 52 (para precisión doble). Entonces, sin denormales, siempre termina con un espacio entre 0 y el número más pequeño de coma flotante que es 2 52 veces el tamaño de la diferencia entre los dos números más pequeños. Los denormales llenan este espacio uniformemente.
Como un ejemplo sobre los efectos del subdesbordamiento abrupto vs. gradual, observe matemáticamente equivalentes x == y
x - y == 0
. Si y
son pequeños pero diferentes y usa un subdesbordamiento abrupto, entonces si su diferencia es menor que el valor de corte mínimo, su diferencia será cero, y así se viola la equivalencia.
Con subdesbordamiento gradual, la diferencia entre dos números normales pequeños pero diferentes llega a ser un denormal, que todavía no es cero. La equivalencia se conserva.
Por lo tanto, no se recomienda el uso de denormales a propósito, ya que se diseñaron solo como un mecanismo de respaldo en casos excepcionales .
Así que estoy tratando de aprender más acerca de los números desnormalizados como se define en el estándar IEEE 754 para los números de coma flotante. Ya he leído varios artículos gracias a los resultados de búsqueda de Google, y he revisado varias publicaciones de StackOverFlow. Sin embargo, todavía tengo algunas preguntas sin respuesta.
Primero, solo para revisar mi comprensión de lo que es un flotador desnormalizado:
Números que tienen menos bits de precisión, y son más pequeños (en magnitud) que los números normalizados
Esencialmente, un flotador desnormalizado tiene la capacidad de representar el número MÁS PEQUEÑO (en magnitud) que se puede representar con cualquier valor de coma flotante.
¿Eso suena correcto? ¿Algo más que eso?
He leído eso:
el uso de números desnormalizados tiene un costo de rendimiento en muchas plataformas
¿Algún comentario sobre esto?
También leí en uno de los artículos que
uno debe "evitar la superposición entre números normalizados y desnormalizados"
¿Algún comentario sobre esto?
En algunas presentaciones del estándar IEEE, cuando se presentan rangos de coma flotante, los valores desnormalizados se excluyen y las tablas se etiquetan como un "rango efectivo", casi como si el presentador estuviera pensando "Sabemos que los números desnormalizados PUEDEN representar la flota flotante más pequeña posible". los valores de los puntos, pero debido a ciertas desventajas de los números desnormalizados, elegimos excluirlos de los rangos que mejor se ajusten a los escenarios de uso común "- Como si los números desnormalizados no se usan comúnmente.
Supongo que sigo teniendo la impresión de que el uso de números desnormalizados no es bueno en la mayoría de los casos.
Si tuviera que responder esa pregunta por mi cuenta, me gustaría pensar que:
Usar números desnormalizados es bueno porque puede representar los números más pequeños (en magnitud) posibles. Siempre que la precisión no sea importante y no los confunda con números normalizados, Y el rendimiento resultante de la aplicación se ajusta a los requisitos.
Usar números desnormalizados es algo malo porque la mayoría de las aplicaciones no requieren representaciones tan pequeñas: la pérdida de precisión es perjudicial, y puede dispararse fácilmente en el pie al mezclarlos con números normalizados, Y el rendimiento no vale la pena el costo en la mayoría de los casos.
¿Algún comentario sobre estas dos respuestas? ¿Qué más podría extrañar o no entender acerca de los números desnormalizados?