valor representar que punto para numero notación normalizada mantisa informatica flotante exponente estandar ejemplos coma floating-point precision processor operations

floating point - representar - ¿Cuál es la diferencia entre una precisión simple y una operación de coma flotante de doble precisión?



que es coma flotante en informatica (9)

¿Cuál es la diferencia entre una operación de punto flotante de precisión simple y una operación de flotación de doble precisión?

Estoy especialmente interesado en términos prácticos en relación con las consolas de videojuegos. Por ejemplo, ¿la Nintendo 64 tiene un procesador de 64 bits y, si lo hace, significa que es capaz de realizar operaciones de coma flotante de doble precisión? ¿Pueden la PS3 y la Xbox 360 realizar operaciones de coma flotante de precisión doble o solo precisión simple y, en general, utilizar las capacidades de precisión doble que se usan (si existen?).


Básicamente, la aritmética de coma flotante de precisión simple trata con números de coma flotante de 32 bits, mientras que la precisión doble trata con 64 bits.

El número de bits en precisión doble aumenta el valor máximo que se puede almacenar, así como el aumento de la precisión (es decir, el número de dígitos significativos).


De acuerdo con IEEE754 • Estándar para almacenamiento en coma flotante • Estándares de 32 y 64 bits (precisión simple y doble precisión) • 8 y 11 bits de exponente respectivamente • Formatos extendidos (tanto mantisa como exponente) para resultados intermedios


De acuerdo, la diferencia básica en la máquina es que la precisión doble usa el doble de bits que el simple. En la implementación habitual, eso es 32 bits para un solo, 64 bits para el doble.

Pero, ¿qué significa eso? Si asumimos el estándar IEEE, entonces un solo número de precisión tiene aproximadamente 23 bits de la mantisa, y un exponente máximo de aproximadamente 38; una precisión doble tiene 52 bits para la mantisa y un exponente máximo de aproximadamente 308.

Los detalles están en Wikipedia , como de costumbre.


El número de precisión simple usa 32 bits, con el MSB como bit de signo, mientras que el número de doble precisión usa 64 bits, siendo MSB bit de signo Single precision-SEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFF. (SIGN + EXPONENT + SIGNIFICAND) Doble precisión-SEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF. (SIGN + EXPONENT + SIGNIFICAND)


En cuanto a la pregunta "¿Pueden el ps3 y el xbxo 360 realizar operaciones de coma flotante de doble precisión o solo una precisión simple y en el uso general son las capacidades de doble precisión que se usan (si existen?)".

Creo que ambas plataformas son incapaces de doble punto flotante. El procesador Cell original solo tenía flotadores de 32 bits, lo mismo con el hardware ATI en el que se basa XBox 360 (R600). The Cell obtuvo soporte de doble punto flotante más adelante, pero estoy bastante seguro de que la PS3 no usa ese chippery.


La precisión doble significa que los números requieren el doble de la longitud de la palabra para almacenar. En un procesador de 32 bits, las palabras son todos 32 bits, por lo que los dobles son 64 bits. Lo que esto significa en términos de rendimiento es que las operaciones con números de doble precisión tardan un poco más en ejecutarse. Así que obtienes un mejor alcance, pero hay un pequeño golpe en el rendimiento. Este golpe se ve mitigado un poco por las unidades de punto flotante de hardware, pero aún está allí.

El N64 usaba un NEC VR4300 basado en MIPS R4300i, que es un procesador de 64 bits, pero el procesador se comunica con el resto del sistema en un bus de 32 bits de ancho. Entonces, la mayoría de los desarrolladores usaron números de 32 bits porque son más rápidos, y la mayoría de los juegos en ese momento no necesitaban la precisión adicional (por lo tanto, usaban flotantes y no dobles).

Los tres sistemas pueden realizar operaciones flotantes de precisión simple y doble, pero pueden no hacerlo debido al rendimiento. (aunque casi todo después de que el n64 usó un bus de 32 bits, así que ...)


Leí muchas respuestas, pero ninguna parece explicar correctamente de dónde viene la palabra doble . Recuerdo una muy buena explicación dada por un profesor universitario que tuve hace algunos años.

Recordando el estilo de la respuesta de VonC, una representación de coma flotante de precisión simple usa una palabra de 32 bits.

  • 1 bit para el signo , S
  • 8 bits para el exponente , ''E''
  • 24 bits para la fracción , también llamada mantisa , o coeficiente (aunque solo se representan 23). Vamos a llamarlo ''M'' (para mantissa , prefiero este nombre como "fracción" puede ser mal interpretado).

Representación:

S EEEEEEEE MMMMMMMMMMMMMMMMMMMMMMM bits: 31 30 23 22 0

(Solo para señalar, el bit de signo es el último, no el primero).

Una representación de punto flotante de precisión doble usa una palabra de 64 bits.

  • 1 bit para el signo , S
  • 11 bits para el exponente , ''E''
  • 53 bits para la fracción / mantisa / coeficiente (aunque solo se representan 52), ''M''

Representación:

S EEEEEEEEEEE MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM bits: 63 62 52 51 0

Como habrán notado, escribí que la mantisa tiene, en ambos tipos, un poco más de información en comparación con su representación. De hecho, la mantisa es un número representado sin todo su 0 no significativo. Por ejemplo,

  • 0.000124 se convierte en 0.124 × 10 -3
  • 237.141 se convierte en 0.237141 × 10 3

Esto significa que la mantisa siempre estará en la forma

0.α 1 α 2 ... α t × β p

donde β es la base de la representación. Pero dado que la fracción es un número binario, α 1 siempre será igual a 1, por lo tanto, la fracción se puede reescribir como 1.α 2 α 3 ... α t + 1 × 2 py la inicial 1 se puede suponer implícitamente, haciendo espacio para un poco más (α t + 1 ).

Ahora, es obviamente cierto que el doble de 32 es 64, pero de ahí viene la palabra.

La precisión indica la cantidad de dígitos decimales que son correctos , es decir, sin ningún tipo de error de representación o aproximación. En otras palabras, indica cuántos dígitos decimales uno puede usar con seguridad .

Dicho esto, es fácil estimar la cantidad de dígitos decimales que se pueden usar con seguridad:

  • precisión simple : log 10 (2 24 ), que es aproximadamente 7 ~ 8 dígitos decimales
  • doble precisión : log 10 (2 53 ), que tiene aproximadamente 15 ~ 16 dígitos decimales

Nota: la Nintendo 64 tiene un procesador de 64 bits, sin embargo:

Muchos juegos aprovecharon el modo de procesamiento de 32 bits del chip ya que la mayor precisión de datos disponible con tipos de datos de 64 bits no suele ser requerida por juegos 3D, así como el hecho de que el procesamiento de datos de 64 bits utiliza el doble de memoria caché y ancho de banda, lo que reduce el rendimiento general del sistema.

De Webopedia :

El término doble precisión es un nombre inapropiado porque la precisión no es realmente el doble.
La palabra doble deriva del hecho de que un número de precisión doble usa el doble de bits que un número de coma flotante regular.
Por ejemplo, si un número de precisión simple requiere 32 bits, su contraparte de precisión doble tendrá 64 bits de longitud.

Los bits adicionales aumentan no solo la precisión sino también el rango de magnitudes que se pueden representar.
La cantidad exacta en que se aumentan la precisión y el rango de magnitudes depende del formato que el programa esté utilizando para representar los valores de coma flotante.
La mayoría de las computadoras usan un formato estándar conocido como el formato de coma flotante IEEE.

Del estándar IEEE para aritmética de coma flotante

Precisión simple

La representación estándar de coma flotante de precisión simple IEEE requiere una palabra de 32 bits, que se puede representar como numerada de 0 a 31, de izquierda a derecha.

  • El primer bit es el bit de signo , S,
  • los siguientes ocho bits son los bits de exponente , ''E'' y
  • los 23 bits finales son la fracción ''F'':

    S EEEEEEEE FFFFFFFFFFFFFFFFFFFFFFF 0 1 8 9 31

El valor V representado por la palabra se puede determinar de la siguiente manera:

  • Si E = 255 y F es distinto de cero, entonces V = NaN ("No es un número")
  • Si E = 255 y F es cero y S es 1, entonces V = -Infinito
  • Si E = 255 y F es cero y S es 0, entonces V = Infinito
  • Si 0<E<255 entonces V=(-1)**S * 2 ** (E-127) * (1.F) donde "1.F" está destinado a representar el número binario creado al anteponer F con un líder implícito 1 y un punto binario.
  • Si E = 0 y F es distinto de cero, entonces V=(-1)**S * 2 ** (-126) * (0.F) . Estos son valores "no normalizados".
  • Si E = 0 y F es cero y S es 1, entonces V = -0
  • Si E = 0 y F es cero y S es 0, entonces V = 0

En particular,

0 00000000 00000000000000000000000 = 0 1 00000000 00000000000000000000000 = -0 0 11111111 00000000000000000000000 = Infinity 1 11111111 00000000000000000000000 = -Infinity 0 11111111 00000100000000000000000 = NaN 1 11111111 00100010001001010101010 = NaN 0 10000000 00000000000000000000000 = +1 * 2**(128-127) * 1.0 = 2 0 10000001 10100000000000000000000 = +1 * 2**(129-127) * 1.101 = 6.5 1 10000001 10100000000000000000000 = -1 * 2**(129-127) * 1.101 = -6.5 0 00000001 00000000000000000000000 = +1 * 2**(1-127) * 1.0 = 2**(-126) 0 00000000 10000000000000000000000 = +1 * 2**(-126) * 0.1 = 2**(-127) 0 00000000 00000000000000000000001 = +1 * 2**(-126) * 0.00000000000000000000001 = 2**(-149) (Smallest positive value)

Precisión doble

La representación estándar de coma flotante de doble precisión IEEE requiere una palabra de 64 bits, que se puede representar como numerada de 0 a 63, de izquierda a derecha.

  • El primer bit es el bit de signo , S,
  • los siguientes once bits son los bits del exponente , ''E'', y
  • los últimos 52 bits son la fracción ''F'':

    S EEEEEEEEEEE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0 1 11 12 63

El valor V representado por la palabra se puede determinar de la siguiente manera:

  • Si E = 2047 y F es distinto de cero, entonces V = NaN ("No es un número")
  • Si E = 2047 y F es cero y S es 1, entonces V = -Infinito
  • Si E = 2047 y F es cero y S es 0, entonces V = Infinito
  • Si 0<E<2047 entonces V=(-1)**S * 2 ** (E-1023) * (1.F) donde "1.F" está destinado a representar el número binario creado al anteponer F con un líder implícito 1 y un punto binario.
  • Si E = 0 y F es distinto de cero, entonces V=(-1)**S * 2 ** (-1022) * (0.F) Estos son valores "no normalizados".
  • Si E = 0 y F es cero y S es 1, entonces V = -0
  • Si E = 0 y F es cero y S es 0, entonces V = 0

Referencia:
Norma ANSI / IEEE 754-1985,
Estándar para aritmética de punto flotante binario.


Para agregar a todas las maravillosas respuestas aquí

En primer lugar, flotante y doble se utilizan para la representación de números fraccionarios. Entonces, la diferencia entre los dos proviene del hecho de cuánta precisión pueden almacenar los números.

Por ejemplo: Tengo que almacenar 123.456789 Uno puede almacenar solo 123.4567 mientras que otro puede almacenar el exacto 123.456789.

Entonces, básicamente, queremos saber con cuánta precisión se puede almacenar el número y es lo que llamamos precisión.

Citando a @Alessandro aquí

La precisión indica la cantidad de dígitos decimales que son correctos , es decir, sin ningún tipo de error de representación o aproximación. En otras palabras, indica cuántos dígitos decimales uno puede usar con seguridad .

Float puede almacenar con precisión alrededor de 7-8 dígitos en la parte fraccionaria, mientras que Double puede almacenar con precisión entre 15 y 16 dígitos en la parte fraccionaria

Entonces, el flotador puede almacenar el doble de la cantidad de partes fraccionarias. Es por eso que Double se llama double the float