En el que computa, el flotante describe un sistema numérico de la representación en el cual una secuencia de dígitos (o de pedacitos representa un número verdadero . Las representaciones lo más comúnmente posible encontradas son ésas definidas por el estándar de IEEE 754 .
El " conocido; flotación-point" refiere al hecho de que la coma de la base (coma, o, más comunmente en computadoras, punto binario) pueden “flotar”; es decir, puede ser colocada dondequiera concerniente a los dígitos significativos del número. Esta posición se indica por separado en la representación interna, y la representación de coma flotante se puede pensar así en como realización de la computadora de la notación científica .
La ventaja de la representación de coma flotante sobre la representación de punto fijo (y el número entero ) es que puede apoyar una gama mucho más amplia de valores. Por ejemplo, una representación de punto fijo que tiene ocho dígitos decimales, con la coma presunta para ser colocado después del sexto dígito, puede representar los números 123456.00, y así sucesivamente, mientras que una representación de coma flotante con ocho dígitos decimales podría también representar 1.000012345678, 12345678000000000, y así sucesivamente. El formato flotante necesita levemente más almacenaje (codificar la posición de la coma), así que cuando están almacenados en el mismo espacio, los números de coma flotante alcanzan su mayor gama a expensas levemente de menos precisión .
La velocidad de las operaciones de coma flotante es una medida importante del funcionamiento para las computadoras en muchos dominios del uso. Se mide en " el mega SE TIRA el " de ; (millón de operaciones de coma flotante por segundo), o GigaFLOPS, las instalaciones de calidad mundial del superordenador del etc. se clasifican generalmente en los teraflops .
en la notación matemática común, la secuencia del dígito puede estar de cualquier longitud, y la localización de la coma de la base es indicada poniendo un " explícito; point" carácter (punto o coma) allí. Si la coma de la base entonces se omite se asume implícito para mentir en el extremo correcto (menos significativo) de la secuencia (es decir, el número es un número entero ).
En sistemas de punto fijo, hacen una cierta convención específica sobre donde la coma de la base está situada en la secuencia. Por ejemplo, la convención podría ser hecha que la secuencia consiste en 8 dígitos, con el punto en el centro, de modo que " 00012345" tiene un valor de 1.
En la notación científica, el número dado es escalado por una energía de 10 de modo que mienta dentro de cierto &ndash de la gama; típicamente entre 1 y 10, con la coma de la base apareciendo inmediatamente después del primer dígito. El factor de escala, como energía de diez, entonces se indica por separado en el final del número. Por ejemplo, el período de la revolución Io de la luna de de Júpiter es 152853. Esto sería representada en la notación científica de la estándar-forma como 1.
La representación de coma flotante refiere generalmente a un sistema similar a la notación científica, pero sin la inclusión explícita de una coma de la base. En lugar, la coma de la base se asume implícito para mentir siempre en un &ndash de la posición del cetain; a menudo enseguida después o momentos antes del dígito más significativo. Como en la notación científica, la magnitud real del número es especificada por el " separado; " del exponente ; información. Este artículo seguirá a convención que la coma de la base está enseguida después del dígito (extremo izquierdo) más significativo. Bajo esa convención, el período orbital Io es 1528535047 con un exponente de 5. La interpretación estándar de esa secuencia del dígito sería 1.528535047, y la designación del exponente indica que la coma de la base es realmente 5 dígitos a la derecha de ésa, es decir, el número real es las épocas 105 más grandes que la interpretación estándar.
Permitiendo que la coma de la base sea ajustable, la notación de coma flotante permite cálculos sobre una amplia gama de magnitudes, usar un número fijo de dígitos, mientras que mantiene la buena precisión. Por ejemplo, en un sistema flotante decimal con tres dígitos, la multiplicación que los seres humanos escribirían como del × 0.12 del
ser expresado como × del 1.44) En un sistema de punto fijo con la coma en la izquierda, sería del × 0.120 del
Un dígito del resultado fue perdido debido a la inhabilidad de los dígitos y de la coma “de flotar” concerniente a uno a dentro de la secuencia del dígito.
La gama de números de coma flotante depende del número de pedacitos usados para la representación del coeficiente (los dígitos significativos del número) y para el exponente. En un sistema informático típico, un número de coma flotante (64-bit) “de precisión doble” tiene un coeficiente de 53 pedacitos (uno cuyo se implica), un exponente de 11 pedacitos, y un pedacito de muestra. Los números de coma flotante positivos en este formato tienen una gama aproximada de 10− 308 a 10308 (porque 308 es aproximadamente 1023 * log10(2), puesto que es la gama del exponente). La gama completa del formato es alrededor de − 10308 con +10308 (véase el IEEE 754 ).
La representación también incluye un número llamado el exponente. Esto registra la posición, o la compensación, del significand en el número. Esto se puede también referir como la característica, o escala. El significand almacena siempre los dígitos más significativos en el número: los primeros dígitos diferentes a cero en decimal o pedacitos en binario. El exponente es la energía de la base por la cual el significand es multiplicado.
El por sí mismo de la representación de coma flotante se utiliza generalmente solamente en computadoras, porque no lleva a cabo ninguna ventaja sobre la notación científica para la lectura humana. Hay muchas maneras de representar números de coma flotante en computadora-flotar-punto es un término genérico para describir representaciones de número en la computación de eso se utiliza para ejecutar el sistema antedicho de aritmética.
Una representación de número (llamada un el sistema de numeración en matemáticas) especifica una cierta manera de almacenar un número que se pueda codificar como cadena de pedacitos. La aritmética se define como sistema de las acciones en la representación que simulan operaciones aritméticas clásicas. Cuando los números que son representados son los números racionales, una edición inmediata es que hay un número infinito de números racionales, y solamente un número finito de pedacitos dentro de una computadora verdadera. Los números que representamos deben ser un subconjunto del sistema entero. Cuando nos restringimos a las representaciones de coma flotante base-2 (porque éstas son las más fáciles de funcionar sobre en una calculadora numérica) el subconjunto de los números racionales que funcionamos encendido se restringe a los denominadores que son energías de 2. Bajo esta restricción, racional con un denominador que tenga un factor primero con excepción de 2 tendrá una extensión binaria infinita (por ejemplo, el valor decimal 0.1, o 1/10, tiene un factor primero de 5 y en binario es 0.00011001100…, con los cuatro dígitos pasados repitiéndose).
Si consideramos esta extensión pues una cadena infinita de pedacitos entonces allí es varios métodos para aproximar esta secuencia en memoria:
Cuando almacenamos un significand de tamaño fijo en una posición constante en la pedacito-secuencia la representación se llama el de punto fijo. El hardware para manipular estas representaciones es menos costoso que flotante y es de uso general realizar operaciones del número entero. En este caso la coma de la base está en alguÌn de posición fija predeterminada, generalmente dentro o adyacente al significand.
Cuando almacenamos un significand de tamaño fijo que se permita muestrear la pedacito-secuencia en cualquier posición, con la localización de la coma de la base no no necesario dentro del significand, la representación se llama flotante.110, el significand binario 11001100… 2 se pudo almacenar junto con un exponente que indica su valor verdadero.
considera también: IEEE 754-1985,
IEEE 754r Las maneras mas comunes de representar números de coma flotante en computadoras son los formatos estandardizados como el IEEE 754 estándar, comúnmente llamado " IEEE que flota-point". Estos formatos se pueden manipular eficientemente por casi todo el hardware moderno de coma flotante, y este artículo se centrará en ellos. El estándar preve realmente muchos formatos estrechamente vinculados, diferenciando en solamente algunos detalles. Dos de estos formatos se llaman los formatos básicos del, y son ubicuos en hardware e idiomas:
Sola precisión, llamada " float" en la familia de lengua C, y el " real" o " real*4" en FORTRAN . Esto ocupa 32 pedacitos (4 octetos) y tiene una precisión del significand de 24 pedacitos (cerca de 7 dígitos decimales).
de precisión doble, llamado " double" en la familia del lenguaje-c, y el " doubleprecision" o " real*8" en el FORTRAN. Esto ocupa 64 pedacitos (8 octetos) y tiene una precisión del significand de 53 pedacitos (cerca de 16 dígitos decimales).
Cuando se ajusta el significand de modo que su dígito extremo izquierdo sea diferente a cero, reputa el normalizado . Para los números de coma flotante binarios, el primer dígito es entonces siempre 1 y por lo tanto no necesita ser codificado, por lo tanto dando un pedacito adicional de la precisión. La normalización se puede por lo tanto pensar en como forma de compresión.
Cuando el número de coma flotante (diferente a cero) de a es normalizado, el valor de su significand obedece 1 < del ≤ s; b si la coma de la base se asume para seguir el primer dígito. (Los números cero y subnormales necesitan el trato especial; esto será descrito más abajo.) ¡siguiente es verdad independientemente de si el número es normalizado. ¿moverse en alguna parte? Cuando un número está en necesidades de la representación de coma flotante una no más de expresar el punto explícitamente; el exponente proporciona esa información. En la notación de coma flotante decimal con la precisión de 10, el período de la revolución de Io es simplemente un exponente e=5 y un significand s=1528535047. La coma implicada está después del primer dígito de s (después del “1” y antes de los primeros “5”). -->
Equivalente, esto es: (donde el s, aquí, significa el valor de número entero del significand entero)
En la raíz binaria (la base 2), el significand es una cadena de los pedacitos (1s y 0s) del p de la longitud, cuyo el pedacito extremo izquierdo es 1. El π del número verdadero, representado en binario como serie infinita de pedacitos es el
11.0010010000111111011010101000100010000101101000110000100011010011 del
… pero es el
11.0010010000111111011011 cuando es aproximado por el que redondea a una precisión de 24 pedacitos. En la solo-precisión binaria flotante, esto se representa como s=110010010000111111011011 con e=− 23 (o e=1 si s no es un número entero sino se asume para tener un punto binario después del primer pedacito). Esto tiene un valor decimal del 3.141592 7410125732421875 del, mientras que el valor verdadero del π es el 3.1415926535897932384626433832795 … del
Los números de coma flotante con un número limitado de dígitos pueden representar solamente un subconjunto de los números verdaderos tan que ninguÌn número verdadero afuera de ese subconjunto (e., 1/3, o de un número irracional tal como π) no se puede representar exactamente. Los números que aparecen ser cortos y exactos cuando están escritos pueden también sufrir de este problema cuando están convertidos a flotante binario; por ejemplo, el número decimal 0.1 no es representable en flotante binario de ninguna precisión finita. La representación binaria exacta tendría un " 1100" secuencia que continúa sin fin:
e=-4 del
; s=1100110011001100110011001100110011…, pero cuando está redondeado a 24 pedacitos se convierte en el
e=-4; s=110011001100110011001101 que es realmente 0.100000001490116119384765625 en decimal. ¡usted quiere, pero dejar por favor los 0. (Mi referencia anterior al pi que es más " sophisticated" que 0.1 no era obviamente ingenioso.) He conocido a las Software Engineers profesionales (quién deben haber sabido mejor!) quién creyó que los números con las representaciones decimales cortas se podrían representar siempre exactamente. Poner los muchos errores/las supersticiones de f. al resto es importante. -->
Si el número se puede representar exactamente en el formato flotante entonces la conversión es exacta. Si no hay una representación exacta entonces la conversión requiere una opción cuyo número de coma flotante utilizar para representar el valor original. La representación elegida tendrá un diverso valor a la original, y el valor addjusted así se llama el valor redondeado .
Hay vario diverso que redondea los esquemas (o los modos de redondeo del ) usados para determinar el valor redondeado para utilizar. A menudo, el truncamiento era el acercamiento típico. Desde la introducción de IEEE 754, el método del defecto ( '' redondo a lo más cerca posible, lazos incluso '', a veces llamados Rounding de Banker's) se utiliza más comunmente. Este método elige el valor más cercano, o en el caso de un lazo, el valor que haría el extremo del significand en 0 pedacitos. El resultado de redondear el π a 24 flotantes binarios del pedacito diferencia del valor verdadero por cerca de 0.03 porciones por millón, y empareja la representación decimal del π en los primeros 7 dígitos. La diferencia es el error de la discretización y es limitada por la máquina épsilon.
Los modos de redondeo también se utilizan cuando el resultado exacto de una operación de coma flotante necesitaría dígitos más significativos que allí son dígitos en el significand. En este caso el modo de redondeo se aplica al resultado exacto para convertirlo a la representación de coma flotante deseada. Otro uso de modos de redondeo es donde un número se redondea a algunos lugares del decimal (o binario), como al redondear un resultado a los euros y a los centavos (dos lugares decimales); en este caso un modo de redondeo común es redondo lo más cerca posible, los lazos lejos de cero, en el cual un lazo se reúne para los valores positivos.
Otros modos de redondeo comunes siempre alrededor del número en cierta dirección (e., hacia infinito o − infinito). Estos modos alternativos son útiles cuando la cantidad de error que es introducido debe ser limitada. Los usos que requieren un error limitado son el intervalo flotante, y multi-precision aritmético.
El sistema flotante de números fue utilizado por la escuela de Kerala de las matemáticas en el la India del siglo XIV para investigar y para racionalizar sobre la convergencia de las series .
En el 1938, el Conrado Zuse de Berlín, terminó el " Z1 ", la primera computadora programable binaria mecánica. Fue basada en álgebra boleana y tenía la mayor parte de los ingredientes básicos de máquinas modernas, usar el sistema binario y la separación estándar de hoy del almacenaje y de control. Solicitud de patente 1936 de Zuse (Z23139/GMD Nr. 005/021) también sugiere una arquitectura de Von Neumann del (reinventado en el 1945 ) con el programa y los datos modificables en almacenaje. Original la máquina fue llamada el " V1" pero retitulado retroactivo después de la guerra, para evitar la confusión con el misil V1. Trabajó con los números de coma flotante que tenían un exponente de 7 pedacitos, una mantisa de 16 bits, y un pedacito de muestra. La memoria usada deslizando piezas de metal para almacenar 16 tales números, y trabajada bien; pero la unidad aritmética era menos acertada, de vez en cuando sufriendo de ciertos problemas de la ingeniería industrial. El programa fue leído en la película de película desechada perforada de 35 milímetros. Los valores de datos se podrían incorporar de un teclado numérico, y las salidas fueron exhibidas en las lámparas eléctricas. La máquina no era una computadora de fines generales porque careció capacidades de colocación. El Z3 fue terminado en el 1941 y era programa controlado.
Una vez que las calculadoras numéricas electrónicas se convirtieron en una realidad, la necesidad de procesar datos de esta manera fue reconocida rápidamente. La primera computadora comercial a poder hacer esto en hardware aparece ser el Z4 en el 1950, seguido por el IBM 704 en el 1954 . Por algún tiempo después de ese, el hardware flotante era una característica opcional, y las computadoras que la tenían reputaban el " computers" científico;, o tener " computing" científico; capacidad. Todas las computadoras de fines generales modernas tienen esta capacidad. El PDP-11/44 era una extensión del ese de 11/34 incluido el memoria ocult0 y las unidades flotantes como característica estándar.
El UNIVAC 1100/2200 serie, introducida en el 1962, apoyó dos formatos flotantes. La sola precisión utilizó 36 pedacitos, organizados en una 1 muestra del pedacito, un exponente de 8 bits, y una mantisa de 27 pedacitos. De precisión doble usado 72 pedacitos organizados como una 1 muestra del pedacito, exponente de 11 pedacitos, y mantisa de 60 pedacitos. El IBM 7094, introducidos el mismo año, solo y de precisión doble también apoyada, con formatos levemente diversos.
Antes del estándar IEEE-754, las computadoras utilizaron muchas diversas formas de flotante. Éstos diferenciaron en los palabra-tamaños, el formato de las representaciones, y el comportamiento de redondeo de operaciones. Estos sistemas de diferenciación ejecutaron diversas partes de la aritmética en soporte físico y software, con exactitud diversa.
El estándar IEEE-754 fue creado en el principios de los 80, después de que los tamaños de la palabra de 32 pedacitos (o 16 o 64) hubieran sido colocados generalmente sobre. Entre sus innovaciones están éstos:
Una codificación exacto especificada de los pedacitos, de modo que todas las computadoras obedientes interpretaran configuraciones de bits la misma manera. Esto permitió transferir números de coma flotante a partir de una computadora a otra.
Un comportamiento exacto especificado de las operaciones aritméticas. Esto significó que un programa dado, con datos dados, produciría siempre el mismo resultado en cualquier computadora obediente. Esto ayudada para reducir la reputación casi mística que el cómputo flotante tenía para el comportamiento aparentemente no determinista.
La capacidad de las condiciones excepcionales (desbordamiento, divisoria por cero, etc.) de propagar con un cómputo de una manera benigna y de ser dirigido por el software de una manera controlada.
Para la facilidad de la presentación y de la comprensión, la raíz decimal con la precisión de 7 dígitos será utilizada en los ejemplos. Los principios fundamentales están iguales en cualquier raíz o la precisión.
El ejemplo siguiente es decimal (base 10): 123456.001017654 * 10^5 Por lo tanto: 123456.017654 * 10^2) = (1.001017654 * 10^5) = (1.001017654) * 10^5 = 1.235584654 * 10^5
Éste no es nada como convirtiendo a la notación de la ingeniería. Detalladamente:
e=5; s=1.001017654 (después de cambiar de puesto) -------------------- e=5; s=1.235584654 (suma verdadera: 123558.4654)
Éste es el resultado verdadero, la suma exacta de los operandos. Será redondeado a siete dígitos y después normalizado en caso de necesidad. El resultado final es e=5; s=1.235585 (suma final: 123558.5)
Observar que los dígitos del punto bajo 3 del segundo operando (654) esencialmente están perdidos. Éste es el error Round-off . En casos extremos, la suma de dos números diferentes a cero puede ser igual a uno de ellos:
e=5; s=1.00000009876543 (después de cambiar de puesto) ---------------------- e=5; s=1.23456709876543 (suma verdadera) e=5; s=1.234567 (después de redondear/normalización)
Otro problema de la pérdida de significación ocurre cuando se restan dos números cercanos.234567 son representaciones de los números racionales 123457.234567 ---------------- e=5; s=0.000000 (después de redondear/normalización)
La mejor representación de esta diferencia es e=-1; s=4.877000, que diferencia más el de 20% de e=-1; s=4. En casos extremos, el resultado final puede ser cero aunque un cálculo exacto puede ser vario millón. Esta cancelación ilustra el peligro en si se asume que todos los dígitos de un resultado computado son significativos.
El ocuparse de las consecuencias de estos errores es asuntos en el análisis numérico .
La división se hace semejantemente, pero ésa es más complicada.
No hay problemas de la cancelación o de la absorción con la multiplicación o división, aunque los pequeños errores pueden acumular mientras que las operaciones se realizan en varias ocasiones. En la práctica, la manera que estas operaciones se realizan en lógica digital puede ser absolutamente compleja. (véase el algoritmo de la multiplicación de la cabina y la división digital )
Cuando un número es normalizado, su pedacito extremo izquierdo del significand se sabe para ser 1. En los formatos solos y de precisión doble de IEEE que el pedacito no está almacenado realmente en el dato de la computadora. Se llama el " hidden" o " implicit" pedacito. Debido a esto, el formato de la sola precisión tiene realmente 24 pedacitos de precisión del significand, mientras que el formato de precisión doble tiene 53.
Por ejemplo, fue demostrado sobre ese π, redondeado a 24 pedacitos de precisión, tiene:
muestra = 0; e=1; s=110010010000111111011011 (pedacito ocultado incluyendo) La suma del diagonal del exponente (127) y del exponente (1) es 128, así que esto se representa en formato de la sola precisión como
0 10000000 10010010000111111011011 (excepto el pedacito ocultado) = 40490FDB en el hexadecimal
Los dos valores del error son " infinity" (" a menudo denotado; INF"), y " " de NaN ; (" no un number"), que cubre el resto de los errores.
"Infinity" no significa necesario que el resultado es realmente infinito. Significa simplemente el " demasiado grande al represent".
Ambos éstos se codifican con el campo del exponente fijado al 1. (Memoria que los campos del exponente de los 0 o 1 son reservados para los significados especiales.) El campo del significand se fija algo que puede distinguirlos -típico cero para los INF y diferentes a cero para NaN. El pedacito de muestra es significativo para los INF, es decir, el hardware flotante distingue entre +∞ y el −∞.
Cuando un número diferente a cero es dividido por cero (el divisor debe ser el exactamente cero), un " zerodivide" el acontecimiento ocurre, y el resultado se fija al infinito de la muestra apropiada. En otros casos en los cuales el exponente del resultado es demasiado grande representar, un " overflow" el acontecimiento ocurre, también produciendo el infinito de la muestra apropiada. la división del
l de un número extremadamente grande por un número extremadamente pequeño puede desbordar y producir infinito. Esto es diferente de un zerodivide, aunque ambos producen un resultado del infinito, y la distinción es generalmente poco importante en la práctica.
El hardware flotante se diseña generalmente para manejar operandos del infinito de una manera razonable, tal como
(+INF) + (+7) = (+INF)
× (+INF) (- 2) = (- INF)
Pero: el × (+INF) 0 = NaN-allí no es ninguna cosa significativa a hacer
Cuando el resultado de una operación tiene un exponente demasiado pequeño representar correctamente, un " underflow" el acontecimiento ocurre. El hardware responde a esto cambiando a un formato en el cual el significand no sea normalizado, y no hay " hidden" pedacito-que, son todos los pedacitos del significand se representan. El campo del exponente se fija al valor reservado de cero. El significand se fija a lo que tiene que ser para ser constante con el exponente. Tal número reputa el " denormalized " (un " denorm" para el cortocircuito), o, en una terminología más moderna, el " subnormal". Denorms es operandos perfectamente legales a las operaciones aritméticas.
Si no hay pedacitos significativos aparecer en el campo del significand, el número es cero. Observar que, en este caso, el campo del exponente y el campo del significand son todo el cero-flotar-punto cero es representado por todos los ceros.
Otros errores, tales como división de cero por cero, o tomar la raíz cuadrada de -1, causan un " error" del operando; el acontecimiento, y produce un resultado de NaN. La propagación de NaNs con aritmética operación-cualquie operando de NaN a cualquier operación causa agresivamente un error del operando y produce un resultado de NaN.
Hay " de cinco special; events" eso puede ocurrir, aunque algunos de ellos son absolutamente benignos:
Un desbordamiento ocurre según lo descrito previamente, produciendo un infinito.
Un desbordamiento de capacidad inferior ocurre según lo descrito previamente, produciendo un denorm o un cero.
Un zerodivide ocurre según lo descrito previamente, produciendo un infinito de la muestra apropiada.
Un " error" del operando; ocurre según lo descrito previamente, produciendo un NaN.
Un " inexact" el acontecimiento ocurre siempre que el redondeo de un resultado cambiara ese resultado del valor matemático verdadero. Esto ocurre casi todo el tiempo, y se no hace caso generalmente. Se mira solamente adentro los usos más exigentes.
El hardware puede típicamente levantar las excepciones cuando ocurren estos acontecimientos. Cómo se hace esto es system-dependent. Estas excepciones son generalmente todos los enmascarados (inhabilitados), confiando solamente en la propagación de los valores del error. A veces se permiten el desbordamiento, el zerodivide, y el error del operando.
El estándar permite muchos diversos niveles de la precisión, cuyo el pedacito 32 (" single") y pedacito 64 (" double") están en gran medida el mas comunes, puesto que se apoyan en lenguajes de programación comunes. El hardware (por ejemplo, la serie de Intel Pentium y Motorola 68000 series) provee a menudo 80 de un formato de la precisión extendida del pedacito, 15 pedacitos del exponente y 64 pedacitos del significand, sin pedacito ocultado. Hay controversia sobre la falta de la mayoría de los lenguajes de programación de poner estos formatos de la precisión extendida a disposición los programadores (aunque el C y los lenguajes de programación relacionados proporcionan generalmente estos formatos vía el tipo largo del doble en tal hardware). Los vendedores de sistema pueden también proporcionar los formatos extendidos adicionales (e. 128 pedacitos) emulados en software.
Un proyecto para revisar el estándar de IEEE 754 ha estado en curso desde 2000. Una última fase de la revisión fue terminada el 10 de marzo de 2007 pero la ratificación final del nuevo estándar todavía está aguardando una decisión más adelante en 2007.
En el modo de redondeo del defecto el IEEE 754 mandatos estándar el comportamiento redondo-a-más cercano descrito arriba para todas las operaciones algebraicas fundamentales, incluyendo raíz cuadrada. (" Library" las funciones tales como coseno y registro no se asignan por mandato.) Esto significa que el comportamiento del hardware IEEE-obediente está determinado totalmente en los 32 o 64 pedacitos.
El comportamiento asignado por mandato para ocuparse de desbordamiento y de desbordamiento de capacidad inferior es que el resultado apropiado está computado, tomando el modo de redondeo en la consideración, como si la gama del exponente era infinitamente grande. Si ese exponente resultante no se puede embalar en su campo correctamente, medidas del desbordamiento/del desbordamiento de capacidad inferior descritas arriba se toman.
La diferencia aritmética entre dos números de coma flotante representables consecutivos que tengan el mismo exponente se llama un " ULP", para la unidad en el lugar pasado. Por ejemplo, los números representados por el hexadecimal 45670123 y 45670124 son un ULP. Para los números con un exponente de 0, un ULP es exactamente 2-23 o sobre 10−7 en la sola precisión, y sobre 10−16 en de precisión doble. El comportamiento asignado por mandato del hardware IEEE-obediente es que el resultado esté dentro de una mitad de un ULP.
Por ejemplo, el non-representability de 0.01 significa que el resultado de intentar ajustar 0.01 ni el número representable más cercano a él. En 24 representaciones del pedacito (sola precisión), 0.1 (decimal) fueron dados previamente como e=-4; s=110011001100110011001101, que es el
.100000001490116119384765625 del
exactamente. Ajustar este número da el
.010000000298023226097399174250313080847263336181640625 del
exactamente. Ajustarlo con hardware flotante de la solo-precisión (con el redondeo) da el
.010000000707805156707763671875 del
exactamente. Pero el número representable más cercano a 0.009999999776482582092285156250 del
exactamente.
También, el non-representability del π (y π/2) significa que un cómputo frustrado del tan (π/2) no rendirá un resultado del infinito, ni incluso desbordará. No es simplemente posible que el hardware flotante estándar intente computar el tan (π/2), porque π/2 no se puede representar exactamente. Este cómputo en C: // bastantes dígitos a estar seguros que conseguimos la aproximación correcta.1415926535897932384626433832795; doble z = tan (pi/2.0); Dará un resultado de 16331239353195370. En la sola precisión (usar la función del tanf), el resultado será -22877332.
De la misma manera, un cómputo frustrado del pecado (π) no la producción cero. El resultado será (aproximadamente) .1225 en de precisión doble, o -.8742 en la sola precisión.
De hecho, mientras que la adición y la multiplicación son amba el comutativo (a+b = b+a y a×b = b×a), no son el asociativo (a + b) + c = a + (b + c). Usar aritmética decimal de 7 dígitos: 1234.246 No son también el distributivo (a + b)×c = a×c + b×c: 1234.340
Además de la pérdida de significación, de la inhabilidad de representar números tales como π y 0.1 exactamente, y de otras inexactitudes leves, los fenómenos siguientes pueden ocurrir:
Cancelación: la substracción de operandos casi iguales puede causar la pérdida de exactitud extrema. Éste es quizás el problema más común y más serio de la exactitud.
Las conversiones al número entero son implacables: el convertir (63.0) a las producciones 7 del número entero, solamente el convertir (0. Esto es porque las conversiones truncan generalmente algo que redondo.
Gama limitada del exponente: los resultados pudieron desbordar rindiendo infinito, o el desbordamiento de capacidad inferior que rendía un valor o un cero de Denormal . Si resulta un número de Denormal, la precisión será perdida.
La prueba para la división segura es problemática: La comprobación de que el divisor no es cero no garantiza que una división no desbordará y no rendirá infinito.
¡La igualdad es problemática! Dos secuencias de cómputo que son matemáticamente iguales bien pueden producir diversos valores flotantes. Los programadores realizan a menudo comparaciones dentro de una cierta tolerancia (a menudo un constante decimal, sí mismo representado no exactamente), pero ése no hace necesario que el problema sale.
Además del diseño cuidadoso de programas, la dirección cuidadosa por el recopilador es esencial. Cierto " optimizations" que los recopiladores pudieron hacer (por ejemplo, reordenando operaciones) puede trabajar contra las metas del software well-behaved. Hay una cierta controversia sobre los failings de recopiladores y la lengua diseña en esta área. Ver las referencias externas en la parte inferior de este artículo.
La aritmética flotante está en su mejor cuando se está utilizando simplemente para medir cantidades del mundo real sobre una amplia gama de escalas (tales como el período orbital Io o la masa del protón ), y en su peor cuando se espera que modele las interacciones de las cantidades expresadas como secuencias decimales que se espere que sean exactas. Un ejemplo del 3ultimo caso es cálculos financieros. Por esta razón, el software financiero tiende a no utilizar una representación de número binaria de coma flotante. El " decimal" el tipo de datos del lenguaje de programación de C#, y el estándar de IEEE 854, se diseñan para evitar los problemas de la representación de coma flotante binaria, y hacen que la aritmética siempre se comporta según lo esperado cuando los números se imprimen en decimal.
Qué hace molesto aritmético flotante es que la gente escribe los algoritmos matemáticos que realizan operaciones un número enorme de épocas, y así que los pequeños errores crecen. Algunos ejemplos son inversión de la matriz, cómputo del vector propio, y ecuación diferencial que soluciona. Estos algoritmos deben ser diseñados muy cuidadosamente si son trabajar bien.
La gente lleva a menudo expectativas de su entrenamiento de las matemáticas en el campo del cómputo flotante. Por ejemplo, se sabe que , y que {\ theta} + . Estos hechos no pueden ser contados en cuando las cantidades implicadas son el resultado del cómputo flotante.
Mientras que un tratamiento de las técnicas para escribir el software flotante de alta calidad está mucho más alla del alcance de este artículo, aquí están algunos trucos simples:
El uso de la prueba de la igualdad (el if (x==y)… ) no es generalmente una buena idea cuando se basa en expectativas de matemáticas puras. Tales cosas se substituyen a veces por el " fuzzy" pruebas (if (ABS (x-y) < épsilon)… ), donde está suficientemente pequeño y adaptado el épsilon al uso, tal como 1. La sabiduría de hacer esto varía grandemente. Es a menudo mejor organizar el código de una manera tal que tales pruebas sean innecesarias.
Un conocimiento de cuando la pérdida de significación puede ocurrir es útil. Por ejemplo, si uno está agregando un número muy grande de números, los sumandos individuales son muy pequeños comparados con la suma. Esto puede llevar a la pérdida de significación. Suponer, por ejemplo, que uno necesita agregar muchos números, todos igualan aproximadamente a 3. Después de 1000 de ellos se han agregado, la suma corriente es cerca de 3000. Una adición típica entonces sería algo como 3253.812 Los dígitos del punto bajo 3 de los sumandos se pierden con eficacia. El algoritmo de la adición de Kahan se puede utilizar para reducir los errores.
Otra cosa que puede ser hecha es cambiar el cómputo de una manera que sea matemáticamente equivalente pero error menos propenso. Como un ejemplo, Archimedes aproximado π calculando los perímetros de los polígonos que inscriben y que circunscriben un círculo, comenzando con hexágonos, y sucesivamente la duplicación del número de lados. La fórmula de repetición para el polígono circunscrito es: = \ frac {1} {\ raíz cuadrada {3}} del
l