stringtranslate.com

Desbordamiento aritmético

El término subdesbordamiento aritmético (también subdesbordamiento de punto flotante , o simplemente subdesbordamiento ) es una condición en un programa de computadora donde el resultado de un cálculo es un número de valor absoluto más preciso que el que la computadora realmente puede representar en la memoria de su unidad central de procesamiento (CPU). ).

El desbordamiento aritmético puede ocurrir cuando el verdadero resultado de una operación de punto flotante es menor en magnitud (es decir, más cercano a cero) que el valor más pequeño representable como un número de punto flotante normal en el tipo de datos de destino . [1] El desbordamiento insuficiente puede considerarse en parte como un desbordamiento negativo del exponente del valor de punto flotante. Por ejemplo, si la parte del exponente puede representar valores de −128 a 127, entonces un resultado con un valor menor que −128 puede causar un desbordamiento insuficiente.

Para los números enteros, el término "desbordamiento de enteros" generalmente se refiere a un tipo especial de desbordamiento de enteros o condición envolvente de enteros por la cual el resultado de la resta daría como resultado un valor menor que el mínimo permitido para un tipo de entero dado, es decir, el resultado ideal estaba más cerca de infinito negativo que el valor representable del tipo de salida más cercano al infinito negativo. [2] [3] [4] [5] [6]

Brecha de flujo inferior

El intervalo entre − fminN y fminN , donde fminN es el valor de punto flotante normal positivo más pequeño, se denomina espacio de subflujo. Esto se debe a que el tamaño de este intervalo es muchos órdenes de magnitud mayor que la distancia entre valores de punto flotante normales adyacentes justo fuera del espacio. Por ejemplo, si el tipo de datos de punto flotante puede representar 20 bits , el espacio de subdesbordamiento es 2 21 veces mayor que la distancia absoluta entre valores de punto flotante adyacentes justo fuera del espacio. [7]

En diseños más antiguos, el espacio de flujo inferior tenía solo un valor utilizable: cero. Cuando se producía un desbordamiento insuficiente, el resultado verdadero se reemplazaba por cero (ya sea directamente por el hardware o por el software del sistema que manejaba la condición de desbordamiento primario). Este reemplazo se llama "flujo a cero".

La edición de 1984 de IEEE 754 introdujo números subnormales . Los números subnormales (incluido el cero) llenan el espacio de subdesbordamiento con valores donde la distancia absoluta entre valores adyacentes es la misma que para los valores adyacentes justo fuera del espacio de subdesbordamiento. Esto permite un "desbordamiento gradual", donde se utiliza un valor subnormal más cercano, del mismo modo que se utiliza un valor normal más cercano cuando es posible. Incluso cuando se utiliza un desbordamiento gradual, el valor más cercano puede ser cero. [8]

La distancia absoluta entre valores de coma flotante adyacentes justo fuera del espacio se llama épsilon de máquina , y generalmente se caracteriza por el valor más grande cuya suma con el valor 1 dará como resultado la respuesta con el valor 1 en ese esquema de coma flotante. [9] Esto se puede escribir como , donde es una función que convierte el valor real en la representación de punto flotante. Si bien el épsilon de la máquina no debe confundirse con el nivel de desbordamiento insuficiente (asumiendo números subnormales), está estrechamente relacionado. La máquina épsilon depende de la cantidad de bits que componen el significado , mientras que el nivel de subdesbordamiento depende de la cantidad de dígitos que componen el campo exponente. En la mayoría de los sistemas de punto flotante, el nivel de flujo inferior es menor que el épsilon de la máquina.

Manejo del desbordamiento

La ocurrencia de un desbordamiento insuficiente puede establecer un bit de estado ("fijo"), generar una excepción, generar una interrupción a nivel de hardware o puede causar alguna combinación de estos efectos.

Como se especifica en IEEE 754 , la condición de desbordamiento insuficiente solo se señala si también hay una pérdida de precisión. Normalmente, esto se determina porque el resultado final es inexacto. Sin embargo, si el usuario está atrapado en un desbordamiento inferior, esto puede suceder independientemente de la pérdida de precisión. El manejo predeterminado en IEEE 754 para el desbordamiento (así como otras excepciones) es registrar como estado de punto flotante que se ha producido un desbordamiento. Esto se especifica para el nivel de programación de aplicaciones, pero a menudo también se interpreta como cómo manejarlo a nivel de hardware.

Ver también

Referencias

  1. ^ Coonen, Jerome T (1980). "Una guía de implementación de un estándar propuesto para aritmética de punto flotante". Computadora . 13 (1): 68–79. doi :10.1109/mc.1980.1653344. S2CID  206445847.
  2. ^ "CWE - CWE-191: Desbordamiento inferior de enteros (envuelto o envolvente) (3.1)". cwe.mitre.org .
  3. ^ "Desbordamiento y subdesbordamiento de tipos de datos en Java - DZone Java". dzone.com .
  4. ^ Mir, Tabish (4 de abril de 2017). "Desbordamiento/subdesbordamiento de enteros e imprecisión de coma flotante". medio.com .
  5. ^ "Desbordamiento de búfer y subdesbordamiento de enteros procesando metadatos MP4 en libstagefright". Mozilla .
  6. ^ "Evitar desbordamientos y desbordamientos insuficientes del búfer". desarrollador.apple.com .
  7. ^ Microsistemas solares (2005). Guía de Computación Numérica. Oráculo . Consultado el 21 de abril de 2018 .
  8. ^ Demmel, James (1984). "Underflow y la confiabilidad del software numérico". Revista SIAM de Computación Científica y Estadística . 5 (4): 887–919. doi :10.1137/0905062.
  9. ^ Brezo, Michael T. (2002). Computación científica (Segunda ed.). Nueva York: McGraw-Hill. pag. 20.ISBN 0-07-239910-4.