¿El valor decimal 0.5 en la representación de punto flotante de precisión simple IEEE?

0

Si no hubiera estudiado el punto flotante de aquí mi respuesta sería una fracción de bits de 000 ... 000 y el valor exponencial de −1 como se muestra a continuación: Pero en el enlace que adjunto arriba, mencionan el valor Desnormalizado , en cuyo caso mi respuesta para esta pregunta sería una fracción de bits de 100… 000 y un valor exponencial de 0. Sé que estoy mezclando algo, y la segunda respuesta es probablemente incorrecta. ¿Alguien puede aclarar por qué no puede ser un valor desnormalizado?

    
pregunta momo

1 respuesta

2

Comience con el número que tiene como \ $ v \ $ y el número de bits de mantisa disponibles en el formato como \ $ m = 23 \ $ (para este formato). Suponiendo que \ $ v \ ne 0 \ $, Aplicar la siguiente lógica:

  1. Configure una nueva variable como \ $ p = 0 \ $.
  2. si \ $ v \ $ es positivo, establezca \ $ s = 0 \ $ else else \ $ v = \: \ mid v \: \ mid \ $ y \ $ s = 1 \ $.
  3. mientras \ $ v \ lt 2 ^ m \ $, establezca \ $ p = p-1 \ $ y \ $ v = 2 \ cdot v \ $.
  4. mientras \ $ v \ ge 2 ^ {m + 1} \ $, establezca \ $ p = p + 1 \ $ y \ $ v = \ frac {v} {2} \ $.

En este punto, tiene un valor \ $ v: 2 ^ m \ le v \ lt 2 ^ {m + 1} \ $. La magnitud de su número original ahora se representa como \ $ v \ cdot 2 ^ p \ $. Pero el redondeo aún no ha ocurrido.

Para redondear el valor para que se ajuste al formato IEEE de 32 bits, realice el siguiente paso:

  1. si \ $ \ se fue (v- \ lfloor v \ rfloor \ right) \ ge \ frac {1} {2} \ $, set \ $ v = \ lfloor v \ rfloor + 1 \ $ else set \ $ v = \ lfloor v \ rfloor \ $.

Ahora tiene el campo de signo representado como \ $ \ left (s \ right) \ $, el campo de mantisa representado por \ $ \ left (v-2 ^ m \ right) \ $ (notación de bits ocultos), y el exponente representado como \ $ \ left (m + p + 127 \ right) \ $.

En este punto, hay un paso final para averiguar si el exponente es representable o está fuera de rango. Si \ $ 0 \ lt \ left (m + p + 127 \ right) \ lt 255 \ $ (para precisión simple), entonces está bien. Pero si eso no es cierto, entonces en el caso de que \ $ \ se fue (m + p + 127 \ derecha) \ le 0 \ $ puede considerar la posibilidad de adaptarlo a un formato denormal donde pueda conservar algunos, pero No todos, de los bits de precisión de la mantisa de orden superior. (Un denormal establece el campo exponencial arbitrariamente en cero). En el otro caso donde \ $ \ left (m + p + 127 \ right) \ ge 255 \ $, no puede representar el número en el formato y debe seleccionar un código de formato de error, en su lugar. Todos estos valores especiales establecen el campo del exponente en 255 y codifican un significado especial agregado dentro del campo de la mantisa.

Una cosa que muchos no comprenden es el concepto de la notación de bits oculta. No es complicado, pero toma un momento considerar.

Dado que la mantisa se normaliza antes de empaquetarse, siempre es el caso que el bit más alto sea un 1 (a menos que el valor fuera 0, por supuesto). Por lo tanto, es una pérdida de espacio incluirlo. Como resultado, el bit que se encuentra más arriba se elimina (se oculta) y solo los bits restantes se guardan en la mantisa. (También se restaura al descomprimir el formato de punto flotante). Puede ver el hecho de que lo oculto en la discusión anterior donde escribí \ $ \ left (v-2 ^ m \ right) \ $: the \ $ El término -2 ^ m \ $ es donde estoy eliminando el bit más oculto / superior de la mantisa.

En el caso de denormales, el bit oculto no se oculta, sino que se incluye en el campo de la mantisa, ya que el exponente (formato 127 en exceso) siempre es cero en este caso y de otra manera no es posible "restaurar" un bit oculto ya que no hay información sobre dónde colocarlo en el caso de un denormal.

    
respondido por el jonk

Lea otras preguntas en las etiquetas