2009-03-12 13 views
10

Un amigo & Estuve debatiendo cómo se almacenan los Inf y NaN durante el almuerzo de hoy.¿Cuál es la representación interna de inf y NaN?

Tome Fortran 90 por ejemplo. Los reales de 4 bytes pueden obtener el valor de Inf o NaN. ¿Cómo se almacena esto internamente? Presumiblemente, un real de 4 bytes es un número representado internamente por un número binario de 32 dígitos. ¿Los Inf's y NaN están almacenados como números binarios de 33 bits?

Respuesta

20

específicamente de de link Pesto:

La precisión simple IEEE representación estándar de punto flotante requiere una palabra de 32 bits, que puede representarse como números 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 últimos 23 bits son la fracción 'F':

 
S EEEEEEEE FFFFFFFFFFFFFFFFFFFFFFF 
0 1  8 9     31 

El valor V representado por la palabra puede ser determinada como sigue:

  • 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=-Infinity
  • Si E=255 y F es cero y S es 0, entonces V=Infinity
  • 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 por el prefijo F con un implícito que lleva 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 es S1, entonces V=-0
  • Si E=0 y F es cero y es S0, entonces V=0
9

La mayoría de las representaciones de coma flotante se basan en el estándar IEEE, que tiene set patterns definido para Inf y NaN.

+2

enlace está roto. – 0xbe5077ed

Cuestiones relacionadas