fbpx
Wikipedia

Formato en coma flotante de simple precisión

El formato en coma flotante de simple precisión es un formato de número de computador u ordenador que ocupa 4 bytes (32 bits) en su memoria y representa un amplio rango dinámico de valores mediante el uso de la coma flotante.

En la norma o estándar IEEE 754-2008 el formato de 32 bits de base 2 se conoce oficialmente como binary32, aunque se le llamaba single en la versión previa del estándar IEEE 754-1985. En los equipos más antiguos, se utilizaron diferentes formatos de coma flotante de 4 bytes, como ejemplo, el tipo de datos de precisión simple en el lenguaje de programación GW-BASIC era un formato de coma flotante de 32 bits MBF (Formato Binario de Microsoft).

Uno de los primeros lenguajes de programación en proporcionar tipos de datos de coma flotante de simple y doble precisión fue Fortran. Antes de la adopción generalizada del estándar IEEE 754-1985, la representación y las propiedades del tipo de datos simple y doble dependían del fabricante del equipo y el modelo de ordenador.

El formato binario en coma flotante de simple precisión se utiliza por abarcar un rango de valores más amplio respecto al formato de coma fija (del mismo ancho de bits), pero a costa de menor precisión. Un entero con signo de 32 bits puede tener un valor máximo de 231 - 1 = 2.147.483.647, mientras que el valor máximo representable en coma flotante del estándar IEEE 754 es (2-2-23) × 2127 ≈ 3,402823466×1038. Todos los números enteros con seis o menos dígitos decimales significativos se pueden convertir a un valor de coma flotante IEEE 754 sin pérdida de precisión, algunos números enteros hasta nueve dígitos decimales significativos pueden convertirse a un valor de coma flotante IEEE 754 sin pérdida de precisión, pero no es posible con los de más de nueve dígitos decimales significativos. Como ejemplo, el número entero de 32 bits 2.147.483.647 se convierte en 2.147.483.650 aplicando la norma IEEE 754.

El formato de precisión simple se conoce como REAL en Fortran,[1]float en C, C++, C#, Java,[2]Float en Haskell,[3]​ y, como Single en Delphi (Pascal), Visual Basic y MATLAB. Sin embargo, float en Python, Rubí, PHP, y OCaml y single en las versiones de Octave anteriores a la 3.2 se refieren a números de doble precisión. En la mayoría de las implementaciones de PostScript, la única precisión real es simple.

Descripción del formato

El estándar IEEE 754 especifica que un formato binary32 consta de:[4]

  • Bits de signo (S): 1 bit.
  • Exponente desplazado (E): 7 bits.
  • Significando o Mantisa (T): 24 bits (23 almacenados explícitamente).

Este formato proporciona una precisión de 6 a 9 dígitos decimales significativos. Si una cadena decimal de hasta 6 dígitos decimales significativos se convierte en formato IEEE 754 de precisión simple y luego se convierte de nuevo al mismo número de dígitos decimales significativos, la cadena final debe coincidir con el original y si un número de precisión simple IEEE 754 se convierte en una cadena decimal con al menos 9 dígitos decimales significativos y luego se convierte de nuevo a un número de precisión simple, entonces el número final debe coincidir con el original.[5]

El bit de signo (S) determina el signo del número, que también es el signo de la mantisa o significando. El exponente (E) es, tanto un número entero de 8 bits con signo en el rango de -126 a 127 (expresado en la forma de complemento a 2) como un entero sin signo (e) de 8 bits comprendido de 0 a 255 que es la forma sesgada aceptada en la definición del formato binary32 de IEEE 754. Si se utiliza el formato de número entero sin signo, el valor del exponente utilizado en la aritmética es el exponente desplazado por un sesgo (E). Para el caso del formato binary32, un valor de exponente desplazado de 127 representa el cero real (es decir, para que 2e-127 sea uno, "e" debe valer 127). El exponente desplazado (E=e-127) abarca desde −126 hasta +127 ya que los valores de −127 (todos ceros) y 128 (todos unos) son reservados para números especiales.

La mantisa real del formato incluye 23 bits de la fracción a la derecha de la coma binaria y un bit de encabezado implícito (a la izquierda de la coma binaria) con valor de "1" a menos que el exponente se almacene con sus bits en cero. Por lo tanto sólo 23 bits de la mantisa aparecen en el formato de la memoria, pero la precisión total es de 24 bits (equivalente a log10 (224) dígitos ≈ 7,225 decimales). Los bits se establecen como sigue, para este ejemplo concreto:

 

El valor real asumido por un determinado dato en formato binary32 con un exponente sesgado (el número entero sin signo de 8 bits) y una fracción de 23 bits esː

 

donde:

  •   (bits de la mantisa o significando)
  •  
  •  
  •  

por lo tanto:

  •  

Codificación del exponente

El exponente en los números binarios de precisión simple en coma flotante se codifica mediante una representación desplazada en binario, siendo +127 el desplazamiento cero; también conocido como sesgo de exponente en la norma IEEE 754. Los valores del exponente son establecidos asíː

  • Emin = -126
  • Emax = 127
  • Sesgo del Exponente = 127

Por lo tanto, con el fin de obtener el verdadero exponente como se define por la representación binaria desplazada, se tiene que restar el desplazamiento de 127 del exponente almacenado lo que equivale a escribirlo en complemento a dos.

Los valores de exponentes expresados en el rango de números en el sistema hexadecimal entre 0016 y FF16 se interpretan de forma especial como se indica en la siguiente tablaː

Exponente Significando cero Significando no-cero Ecuación
0016 cero, −0 números denormalizados  
0116 a FE16 valor normalizado  
FF16 ±infinito NaN (silencioso y señalizado) Sin ecuación

El valor mínimo positivo normalizado es de 2 -126 ≈ 1.18 × 10 -38 y el valor mínimo positivo denormalizado es 2 -149 ≈ 1,4 × 10 -45.

Ejemplos de conversión de números decimales a formato binary32

En general, se acude a la norma IEEE 754 en sí para la conversión estricta (incluyendo el comportamiento de redondeo) de un número real en su equivalente en formato binary32. Para convertir un número real decimal en uno de formato binary32 se debe seguir el siguiente procedimientoː[6]

  1. Si el número a analizar (N) es positivo, asignar a S=0 y, en caso contrario, S=1.
  2. Igualar N a 2x.
  3. Despejar la variable "x", aplicando logaritmos decimales o naturales a ambos lados de la ecuación.
  4. Tomar como valor aproximado al entero inmediatamente inferior y llamarlo "e".
  5. Tomar nuevamente el número decimal N e igualarlo a m*2e.
  6. Despejar "m" y quitarle la parte entera que siempre es "1". Este es el bit a la izquierda de la coma binaria que nunca se incluye en el número en como flotante.
  7. Tomar la fracción del resultado y convertirla en binario. A este valor llamarlo "T"
  8. Sumar a "e" el valor de 127 y convertir el resultado a binario llamándolo "E"
  9. Juntar los resultados de S, E y T que forman parte del número en formato binary32.

La ventaja de este procedimiento es que, en el paso 5, se obtiene de inmediato la mantisa, la cual se convertirá a binario, sin necesidad de convertir la parte entera, la cual siempre será "1". A continuación, se presentan ejemplos de conversión a formato binary32 de números reales decimales mayores que 1 tanto enteros, como con parte fraccionaria y un número pequeño mayor que cero y menor que 1. Con números negativos, la única diferencia en el proceso es la de hacer el bit de signo igual a "1".

Número real entero

Consideremos el número real entero 63. Aplicando el proceso descrito anteriormente, se obtiene:

 

Por tanto, el valor "e" será el entero inmediatamente inferior, el cual es 5. Nuevamente usamos 63 aplicando el paso 5 del procedimiento:

 

Ya que el exponente "e" es 5, se le suma el sesgo de 127 unidades, lo cual da 13210 equivalente a 100001002. La mantisa real consta de los 5 dígitos a la derecha de la coma (0,96875) la cual se convierte a binario hasta completar los 23 bits del campo T (111110000000000000000002). Uniendo los resultados, se consigue esta expresión:

 

La expresión hexadecimal, como es habitual, se obtiene a agrupando todos los bits en 8 conjuntos de 4 y convirtiendo cada uno en el carácter respectivo. En el caso de un número real con parte fraccionaria, se procede de igual manera, con la diferencia de que el valor decimal de la mantisa será convertido a binario de manera aproximada.

Número real grande en notación científica

Para números reales muy grandes en notación científica como 7,3491 x 1022, es aplicable el procedimiento descritoːjj

 

Redondeando al entero inferior más próximo, se obtiene e = 75. Ahora se calcula la mantisa:

 

La parte fraccionaria es por tanto 0,945290573 equivalente a 0,111100011111111010010002. Al exponente decimal 75 se le suman 127 unidades para obtener 202=110010102. Uniendo las cadenas numéricas, se logra la siguiente expresión en formato binary32ː

 

Número pequeño en notación científica

Consideremos el número decimal 1,023 x 10-21. Nuevamente, aplicamos el procedimiento ya conocido. Igualando este número a 2x:

 

El entero próximo inferior de "x" es e=-70. Nuevamente usamos el número a analizar y lo igualamos a m*2e:

 

La parte fraccionaria de m (0,207745228) y se convierte a binario (0,001101010010111011001012) y al exponente e=-70 se le suma 127 y se le convierte a binario obteniéndose 001110012. Uniendo estas cadenas numéricas, se consigue la expresión en binary32:

 

Si el valor para "m" se hubiera redondeado a 1,2077 por ejemplo, habrían existido errores que son inherentes al formato binary32 ya que se pierde precisión aunque se usen menos bits para expresar cantidades decimales.

Ejemplos en precisión simple

Los ejemplos que siguen son expresiones en hexadecimal y binario de valores en coma flotante que incluyen el signo, el exponente desplazado y la mantisa o significando.

  

Los siguientes valores son el máximo y el menor valor finito expresable en formato de coma flotante

  

Las siguientes expresiones prueban la existencia de dos tipos de ceros en el formato binary32:

  

Estas expresiones representan los valores infinitos:

  

Conversión de binary32 a decimal

Para este ejemplo de conversión, se comienza con el número hexadecimal 41C80000, el cual es convertido a binario:

 

La cadena binaria debe ser dividida en tres partes: bit de signo (1 bit), exponente (8bits) y significando (23 bits).

  • Bit de signo= 0
  • Exponente: 1000 00112 = 131
  • Significando: 100 1000 0000 0000 0000 00002 = 48000016

Luego, se añade el bit implícito al significando:

  • Significando: 1100 1000 0000 0000 0000 00002

y se decodifica el valor del exponente restándole 127: 131 − 127 = 4

Cada uno de los 24 bits del significando (incluyendo el bit implícito), se multiplica por la potencia de 2 correspondiente:

  

En este ejemplo la mantisa o significando tiene tres bits en "1 lógico": bit I (bit implícito, que siempre es "1"), bit 22 y bit 19. Sumando las tres contribuciones de estos bits :

  • Significando decodificado: 1 + 0,5 + 0,0625 = 1,5625.

Este significando debe ser multiplicado por la potencia 4 de la base 2 para obtener el resultado final:

 

Límites de precisión sobre números enteros

La siguiente tabla indica como son representados los números dentro de los rangos indicados.

Rangos de enteros Representación de la mantisa
  Exacta
 o   Redondeo a un múltiplo de 2
  o   Redondeo a un múltiplo de 4
  o   Redondeo a un múltiplo de  
  o   Redondeo a un múltiplo de  
  o   Redondeo a Infinito ( )

Optimizaciones

El diseño del formato de coma flotante permite varias optimizaciones, resultantes de la fácil generación de una aproximación de un logaritmo binario desde una vista entera del patrón de bits sin procesar. La aritmética de números enteros y el desplazamiento de bits pueden producir una aproximación a la raíz cuadrada recíproca (raíz cuadrada inversa rápida), comúnmente requerida en gráficos computarizados.

Véase también

Referencias

  1. «REAL Statement». scc.ustc.edu.cn (en inglés). University of Science and Technology of China. Consultado el 4 de marzo de 2017. 
  2. «Primitive Data Types (The Java™ Tutorials)». java.sun.com (en inglés estadounidense). Oracle Inc. Consultado el 4 de marzo de 2017. 
  3. «6 Predefined Types and Classes». www.haskell.org (en inglés). Consultado el 4 de marzo de 2017. 
  4. (en inglés). IEEE. Archivado desde el original el 6 de noviembre de 2016. Consultado el 4 de marzo de 2017. 
  5. William Kahan (1 de octubre de 1987). «Lecture Notes on the Status of IEEE Standard 754 for Binary Floating-Point Arithmetic» (en inglés). Consultado el 4 de marzo de 2017. 
  6. Antonio Bello. «Tutorías UNED - IEEE 754 - Ejemplos». Oviedo, España: Universidad de Oviedo. Consultado el 4 de marzo de 2017. 

Enlaces externos

  • Convertidor de formato IEEE 754
  • Live floating-point bit pattern editor
  • Online converter for IEEE 754 numbers with single precision
  • C source code to convert between IEEE double, single, and half precision
  •   Datos: Q1307173

formato, coma, flotante, simple, precisión, formato, coma, flotante, simple, precisión, formato, número, computador, ordenador, ocupa, bytes, bits, memoria, representa, amplio, rango, dinámico, valores, mediante, coma, flotante, norma, estándar, ieee, 2008, fo. El formato en coma flotante de simple precision es un formato de numero de computador u ordenador que ocupa 4 bytes 32 bits en su memoria y representa un amplio rango dinamico de valores mediante el uso de la coma flotante En la norma o estandar IEEE 754 2008 el formato de 32 bits de base 2 se conoce oficialmente como binary32 aunque se le llamaba single en la version previa del estandar IEEE 754 1985 En los equipos mas antiguos se utilizaron diferentes formatos de coma flotante de 4 bytes como ejemplo el tipo de datos de precision simple en el lenguaje de programacion GW BASIC era un formato de coma flotante de 32 bits MBF Formato Binario de Microsoft Uno de los primeros lenguajes de programacion en proporcionar tipos de datos de coma flotante de simple y doble precision fue Fortran Antes de la adopcion generalizada del estandar IEEE 754 1985 la representacion y las propiedades del tipo de datos simple y doble dependian del fabricante del equipo y el modelo de ordenador El formato binario en coma flotante de simple precision se utiliza por abarcar un rango de valores mas amplio respecto al formato de coma fija del mismo ancho de bits pero a costa de menor precision Un entero con signo de 32 bits puede tener un valor maximo de 231 1 2 147 483 647 mientras que el valor maximo representable en coma flotante del estandar IEEE 754 es 2 2 23 2127 3 402823466 1038 Todos los numeros enteros con seis o menos digitos decimales significativos se pueden convertir a un valor de coma flotante IEEE 754 sin perdida de precision algunos numeros enteros hasta nueve digitos decimales significativos pueden convertirse a un valor de coma flotante IEEE 754 sin perdida de precision pero no es posible con los de mas de nueve digitos decimales significativos Como ejemplo el numero entero de 32 bits 2 147 483 647 se convierte en 2 147 483 650 aplicando la norma IEEE 754 El formato de precision simple se conoce como REAL en Fortran 1 float en C C C Java 2 Float en Haskell 3 y como Single en Delphi Pascal Visual Basic y MATLAB Sin embargo float en Python Rubi PHP y OCaml y single en las versiones de Octave anteriores a la 3 2 se refieren a numeros de doble precision En la mayoria de las implementaciones de PostScript la unica precision real es simple Indice 1 Descripcion del formato 1 1 Codificacion del exponente 1 2 Ejemplos de conversion de numeros decimales a formato binary32 1 2 1 Numero real entero 1 2 2 Numero real grande en notacion cientifica 1 2 3 Numero pequeno en notacion cientifica 1 3 Ejemplos en precision simple 1 4 Conversion de binary32 a decimal 1 5 Limites de precision sobre numeros enteros 1 6 Optimizaciones 2 Vease tambien 3 Referencias 4 Enlaces externosDescripcion del formato EditarEl estandar IEEE 754 especifica que un formato binary32 consta de 4 Bits de signo S 1 bit Exponente desplazado E 7 bits Significando o Mantisa T 24 bits 23 almacenados explicitamente Este formato proporciona una precision de 6 a 9 digitos decimales significativos Si una cadena decimal de hasta 6 digitos decimales significativos se convierte en formato IEEE 754 de precision simple y luego se convierte de nuevo al mismo numero de digitos decimales significativos la cadena final debe coincidir con el original y si un numero de precision simple IEEE 754 se convierte en una cadena decimal con al menos 9 digitos decimales significativos y luego se convierte de nuevo a un numero de precision simple entonces el numero final debe coincidir con el original 5 El bit de signo S determina el signo del numero que tambien es el signo de la mantisa o significando El exponente E es tanto un numero entero de 8 bits con signo en el rango de 126 a 127 expresado en la forma de complemento a 2 como un entero sin signo e de 8 bits comprendido de 0 a 255 que es la forma sesgada aceptada en la definicion del formato binary32 de IEEE 754 Si se utiliza el formato de numero entero sin signo el valor del exponente utilizado en la aritmetica es el exponente desplazado por un sesgo E Para el caso del formato binary32 un valor de exponente desplazado de 127 representa el cero real es decir para que 2e 127 sea uno e debe valer 127 El exponente desplazado E e 127 abarca desde 126 hasta 127 ya que los valores de 127 todos ceros y 128 todos unos son reservados para numeros especiales La mantisa real del formato incluye 23 bits de la fraccion a la derecha de la coma binaria y un bit de encabezado implicito a la izquierda de la coma binaria con valor de 1 a menos que el exponente se almacene con sus bits en cero Por lo tanto solo 23 bits de la mantisa aparecen en el formato de la memoria pero la precision total es de 24 bits equivalente a log10 224 digitos 7 225 decimales Los bits se establecen como sigue para este ejemplo concreto El valor real asumido por un determinado dato en formato binary32 con un exponente sesgado el numero entero sin signo de 8 bits y una fraccion de 23 bits esːv 1 b 31 1 b 22 b 21 b 0 2 2 e 127 1 b 31 1 i 0 22 b 22 i 2 i 2 e 127 displaystyle v 1 b 31 times 1 b 22 b 21 b 0 2 times 2 e 127 1 b 31 times left 1 sum i 0 22 b 22 i 2 i right times 2 e 127 donde b 0 b 1 b 22 displaystyle b 0 b 1 ldots b 22 bits de la mantisa o significando b 31 0 displaystyle b 31 0 1 b 22 b 21 b 0 1 i 1 23 b 23 i 2 i 1 2 2 1 25 displaystyle 1 b 22 b 21 b 0 1 sum i 1 23 b 23 i 2 i 1 2 2 1 25 2 e 127 2 124 127 2 3 displaystyle 2 e 127 2 124 127 2 3 por lo tanto v 1 25 2 3 0 15625 displaystyle v 1 25 times 2 3 0 15625 Codificacion del exponente Editar El exponente en los numeros binarios de precision simple en coma flotante se codifica mediante una representacion desplazada en binario siendo 127 el desplazamiento cero tambien conocido como sesgo de exponente en la norma IEEE 754 Los valores del exponente son establecidos asiː Emin 126 Emax 127 Sesgo del Exponente 127Por lo tanto con el fin de obtener el verdadero exponente como se define por la representacion binaria desplazada se tiene que restar el desplazamiento de 127 del exponente almacenado lo que equivale a escribirlo en complemento a dos Los valores de exponentes expresados en el rango de numeros en el sistema hexadecimal entre 0016 y FF16 se interpretan de forma especial como se indica en la siguiente tablaː Exponente Significando cero Significando no cero Ecuacion0016 cero 0 numeros denormalizados 1 b 31 0 b 22 b 21 b 0 2 2 e 126 displaystyle 1 b 31 times 0 b 22 b 21 b 0 2 times 2 e 126 0116 a FE16 valor normalizado 1 b 31 1 b 22 b 21 b 0 2 2 e 127 displaystyle 1 b 31 times 1 b 22 b 21 b 0 2 times 2 e 127 FF16 infinito NaN silencioso y senalizado Sin ecuacionEl valor minimo positivo normalizado es de 2 126 1 18 10 38 y el valor minimo positivo denormalizado es 2 149 1 4 10 45 Ejemplos de conversion de numeros decimales a formato binary32 Editar En general se acude a la norma IEEE 754 en si para la conversion estricta incluyendo el comportamiento de redondeo de un numero real en su equivalente en formato binary32 Para convertir un numero real decimal en uno de formato binary32 se debe seguir el siguiente procedimientoː 6 Si el numero a analizar N es positivo asignar a S 0 y en caso contrario S 1 Igualar N a 2x Despejar la variable x aplicando logaritmos decimales o naturales a ambos lados de la ecuacion Tomar como valor aproximado al entero inmediatamente inferior y llamarlo e Tomar nuevamente el numero decimal N e igualarlo a m 2e Despejar m y quitarle la parte entera que siempre es 1 Este es el bit a la izquierda de la coma binaria que nunca se incluye en el numero en como flotante Tomar la fraccion del resultado y convertirla en binario A este valor llamarlo T Sumar a e el valor de 127 y convertir el resultado a binario llamandolo E Juntar los resultados de S E y T que forman parte del numero en formato binary32 La ventaja de este procedimiento es que en el paso 5 se obtiene de inmediato la mantisa la cual se convertira a binario sin necesidad de convertir la parte entera la cual siempre sera 1 A continuacion se presentan ejemplos de conversion a formato binary32 de numeros reales decimales mayores que 1 tanto enteros como con parte fraccionaria y un numero pequeno mayor que cero y menor que 1 Con numeros negativos la unica diferencia en el proceso es la de hacer el bit de signo igual a 1 Numero real entero Editar Consideremos el numero real entero 63 Aplicando el proceso descrito anteriormente se obtiene 63 2 x x ln 63 ln 2 5 97 displaystyle 63 2 x Rightarrow x frac ln 63 ln 2 approx 5 97 Por tanto el valor e sera el entero inmediatamente inferior el cual es 5 Nuevamente usamos 63 aplicando el paso 5 del procedimiento 63 m 2 5 m 63 2 5 1 96875 displaystyle 63 m times 2 5 Rightarrow m frac 63 2 5 1 96875 Ya que el exponente e es 5 se le suma el sesgo de 127 unidades lo cual da 13210 equivalente a 100001002 La mantisa real consta de los 5 digitos a la derecha de la coma 0 96875 la cual se convierte a binario hasta completar los 23 bits del campo T 111110000000000000000002 Uniendo los resultados se consigue esta expresion 0 10000100 11111000000000000000000 427 C 0000 16 displaystyle 0 10000100 11111000000000000000000 equiv 427 text C 0000 16 La expresion hexadecimal como es habitual se obtiene a agrupando todos los bits en 8 conjuntos de 4 y convirtiendo cada uno en el caracter respectivo En el caso de un numero real con parte fraccionaria se procede de igual manera con la diferencia de que el valor decimal de la mantisa sera convertido a binario de manera aproximada Numero real grande en notacion cientifica Editar Para numeros reales muy grandes en notacion cientifica como 7 3491 x 1022 es aplicable el procedimiento descritoːjj7 3491 10 22 2 x x ln 7 3491 10 22 ln 2 75 95 displaystyle 7 3491 times 10 22 2 x Rightarrow x frac ln 7 3491 times 10 22 ln 2 approx 75 95 Redondeando al entero inferior mas proximo se obtiene e 75 Ahora se calcula la mantisa 7 3491 10 22 M 2 75 M 1 945290573 10 displaystyle 7 3491 times 10 22 M times 2 75 Rightarrow M 1 945290573 10 La parte fraccionaria es por tanto 0 945290573 equivalente a 0 111100011111111010010002 Al exponente decimal 75 se le suman 127 unidades para obtener 202 110010102 Uniendo las cadenas numericas se logra la siguiente expresion en formato binary32ː0 11001010 11110001111111101001000 2 6578 FF 48 16 displaystyle 0 11001010 11110001111111101001000 2 6578 text FF 48 16 Numero pequeno en notacion cientifica Editar Consideremos el numero decimal 1 023 x 10 21 Nuevamente aplicamos el procedimiento ya conocido Igualando este numero a 2x 1 023 10 21 2 x x ln 1 023 10 21 ln 2 69 72 displaystyle 1 023 times 10 21 2 x Rightarrow x frac ln 1 023 times 10 21 ln 2 approx 69 72 El entero proximo inferior de x es e 70 Nuevamente usamos el numero a analizar y lo igualamos a m 2e 1 023 10 21 m 2 70 m 1 023 10 21 2 70 1 207745228 displaystyle 1 023 times 10 21 m times 2 70 Rightarrow m frac 1 023 times 10 21 2 70 approx 1 207745228 La parte fraccionaria de m 0 207745228 y se convierte a binario 0 001101010010111011001012 y al exponente e 70 se le suma 127 y se le convierte a binario obteniendose 001110012 Uniendo estas cadenas numericas se consigue la expresion en binary32 0 00111001 00110101001011101100101 2 1C9A9765 16 displaystyle 0 00111001 00110101001011101100101 2 text 1C9A9765 16 Si el valor para m se hubiera redondeado a 1 2077 por ejemplo habrian existido errores que son inherentes al formato binary32 ya que se pierde precision aunque se usen menos bits para expresar cantidades decimales Ejemplos en precision simple Editar Los ejemplos que siguen son expresiones en hexadecimal y binario de valores en coma flotante que incluyen el signo el exponente desplazado y la mantisa o significando 3F800000 16 0 01111111 00000000000000000000000 2 1 C0000000 16 1 10000000 00000000000000000000000 2 2 displaystyle begin array lllr text 3F800000 16 amp amp 0 01111111 00000000000000000000000 2 amp amp 1 text C0000000 16 amp amp 1 10000000 00000000000000000000000 2 amp amp 2 end array Los siguientes valores son el maximo y el menor valor finito expresable en formato de coma flotante 7F7FFFFF 16 0 11111110 11111111111111111111111 2 1 2 24 2 128 3 402823466 10 38 00800000 16 0 00000001 00000000000000000000000 2 2 126 1 175494351 10 38 displaystyle begin array llll text 7F7FFFFF 16 amp amp 0 11111110 11111111111111111111111 2 amp amp 1 2 24 times 2 128 approx 3 402823466 times 10 38 text 00800000 16 amp amp 0 00000001 00000000000000000000000 2 amp amp 2 126 approx 1 175494351 times 10 38 end array Las siguientes expresiones prueban la existencia de dos tipos de ceros en el formato binary32 00000000 16 0 00000000 00000000000000000000000 2 0 80000000 16 1 00000000 00000000000000000000000 2 0 displaystyle begin array lllr text 00000000 16 amp amp 0 00000000 00000000000000000000000 2 amp amp 0 text 80000000 16 amp amp 1 00000000 00000000000000000000000 2 amp amp 0 end array Estas expresiones representan los valores infinitos 7F800000 16 0 11111111 00000000000000000000000 2 FF800000 16 1 11111111 00000000000000000000000 2 displaystyle begin array lllr text 7F800000 16 amp amp 0 11111111 00000000000000000000000 2 amp amp infty text FF800000 16 amp amp 1 11111111 00000000000000000000000 2 amp amp infty end array Conversion de binary32 a decimal Editar Para este ejemplo de conversion se comienza con el numero hexadecimal 41C80000 el cual es convertido a binario 41C80000 16 0100 0001 1100 1000 0000 0000 0000 0000 2 displaystyle text 41C80000 16 0100 0001 1100 1000 0000 0000 0000 0000 2 La cadena binaria debe ser dividida en tres partes bit de signo 1 bit exponente 8bits y significando 23 bits Bit de signo 0 Exponente 1000 00112 131 Significando 100 1000 0000 0000 0000 00002 48000016Luego se anade el bit implicito al significando Significando 1100 1000 0000 0000 0000 00002y se decodifica el valor del exponente restandole 127 131 127 4Cada uno de los 24 bits del significando incluyendo el bit implicito se multiplica por la potencia de 2 correspondiente bit I 2 0 bit 22 2 1 bit 21 2 2 bit 20 2 3 bit 19 2 4 bit 18 2 5 bit 0 2 23 displaystyle begin array ll text bit I amp times amp 2 0 text bit 22 amp times amp 2 1 text bit 21 amp times amp 2 2 text bit 20 amp times amp 2 3 text bit 19 amp times amp 2 4 text bit 18 amp times amp 2 5 vdots text bit 0 amp times amp 2 23 end array En este ejemplo la mantisa o significando tiene tres bits en 1 logico bit I bit implicito que siempre es 1 bit 22 y bit 19 Sumando las tres contribuciones de estos bits Significando decodificado 1 0 5 0 0625 1 5625 Este significando debe ser multiplicado por la potencia 4 de la base 2 para obtener el resultado final 1 5625 2 4 25 displaystyle 1 5625 times 2 4 25 Limites de precision sobre numeros enteros Editar La siguiente tabla indica como son representados los numeros dentro de los rangos indicados Rangos de enteros Representacion de la mantisa 16777216 16777216 displaystyle 16777216 16777216 Exacta 33554432 16777217 displaystyle 33554432 16777217 o 16777217 33554432 displaystyle 16777217 33554432 Redondeo a un multiplo de 2 2 26 2 25 1 displaystyle 2 26 2 25 1 o 2 25 1 2 26 displaystyle 2 25 1 2 26 Redondeo a un multiplo de 4 2 127 2 126 1 displaystyle 2 127 2 126 1 o 2 126 1 2 127 displaystyle 2 126 1 2 127 Redondeo a un multiplo de 2 103 displaystyle 2 103 2 128 2 104 2 127 1 displaystyle 2 128 2 104 2 127 1 o 2 127 1 2 128 2 104 displaystyle 2 127 1 2 128 2 104 Redondeo a un multiplo de 2 127 23 displaystyle 2 127 23 2 128 displaystyle infty 2 128 o 2 128 displaystyle 2 128 infty Redondeo a Infinito displaystyle pm infty Optimizaciones Editar El diseno del formato de coma flotante permite varias optimizaciones resultantes de la facil generacion de una aproximacion de un logaritmo binario desde una vista entera del patron de bits sin procesar La aritmetica de numeros enteros y el desplazamiento de bits pueden producir una aproximacion a la raiz cuadrada reciproca raiz cuadrada inversa rapida comunmente requerida en graficos computarizados Vease tambien EditarEstabilidad numerica IEEE Coma Flotante Tipo de dato elementalReferencias Editar REAL Statement scc ustc edu cn en ingles University of Science and Technology of China Consultado el 4 de marzo de 2017 Primitive Data Types The Java Tutorials java sun com en ingles estadounidense Oracle Inc Consultado el 4 de marzo de 2017 6 Predefined Types and Classes www haskell org en ingles Consultado el 4 de marzo de 2017 IEEE Standard for Floating Point Arithmetic en ingles IEEE Archivado desde el original el 6 de noviembre de 2016 Consultado el 4 de marzo de 2017 William Kahan 1 de octubre de 1987 Lecture Notes on the Status of IEEE Standard 754 for Binary Floating Point Arithmetic en ingles Consultado el 4 de marzo de 2017 Antonio Bello Tutorias UNED IEEE 754 Ejemplos Oviedo Espana Universidad de Oviedo Consultado el 4 de marzo de 2017 Enlaces externos EditarConvertidor de formato IEEE 754 Live floating point bit pattern editor Online converter for IEEE 754 numbers with single precision C source code to convert between IEEE double single and half precision Datos Q1307173Obtenido de https es wikipedia org w index php title Formato en coma flotante de simple precision amp oldid 127432227, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos