Lenguaje C: almacenamiento de números de punto flotante en la memoria

Tabla de contenido

1. Introducción relacionada

2. Cómo almacenar

(1) Paso 1:

(2) Paso 2: 

(3) Paso tres:

3. Ejemplo:

 4. Normas relevantes a la hora de realizar la contratación:


1. Introducción relacionada

1. En tipo de punto flotante: 1E10 significa 1,0*(10^10)

2. El rango de valores de la familia de enteros se puede ver en el archivo de encabezado <limits.h> y el rango de valores de la familia de punto flotante se puede ver en el archivo de encabezado <float.h>.

3. Es necesario utilizar el sistema binario de decimales al almacenar, por lo que primero comprendemos el sistema binario de decimales.

2. Cómo almacenar

(1) Paso 1:

1. Según el estándar internacional IEEE754. Cualquier número binario de coma flotante V se puede expresar como: (-1)^S * M * 2^E .

explicar:

①: -1^(S) representa el bit de signo. Cuando S==0, (-1)^S==-1, representa un número negativo; cuando S==1, (-1)^S==1, representa un número positivo.

②: M representa un número significativo. Y 1<=M<2.

③: 2^E representa el bit exponente.

Puede parecer abstracto de esta manera, pongamos un ejemplo, como se muestra a continuación:

(2) Paso 2: 

2. Entonces IEEE754 estipula:

①: Para un número de coma flotante de 32 bits, el bit más alto almacena el valor de S, los siguientes ocho bits almacenan el valor de E y los 23 bits restantes almacenan el número significativo M.

 ②: Para un número de coma flotante de 64 bits, el bit más alto almacena el bit de signo S, luego el undécimo bit almacena el exponente E y los 52 bits restantes almacenan el dígito significativo M.

(3) Paso tres:

3. A continuación se introducirán algunas normas especiales. 

①: Debido a que se usa notación científica para el número significativo M, siempre se puede escribir como 1.xxxxx..., por lo que al almacenar, se puede descartar el primer 1 y solo se guarda la parte decimal después de .xxxxx.... y luego agregue 1 cuando se lea.

Propósito: Esto puede guardar un dígito significativo. Tomando un número de punto flotante de 32 bits como ejemplo, a M le queda solo 23. Después de truncar 1, equivale a guardar 24 dígitos significativos.

②: Para el exponente E, en primer lugar, E es un entero sin signo. Si E tiene ocho bits, su valor varía de 0 a 255; si E tiene 11 bits, su rango de valores es de 0 a 2047; pero en notación científica. E puede ser un número negativo, por lo que IEEE754 estipula que al almacenar E, el valor real debe agregarse a un número intermedio para garantizar que E sea un número positivo o 0. Las reglas del número intermedio son las siguientes:

Para una E de 8 bits, el número del medio es 127

Para una E de 11 dígitos, el número del medio es 1023

3. Ejemplo:

Después de conocer las reglas anteriores, puede almacenar un número de punto flotante. A continuación, tomamos el ejemplo de almacenar 5,5 en 32 bits.

 4. Normas relevantes a la hora de realizar la contratación:

Para su eliminación, E se divide en tres situaciones:

1.E no es ni todo 0 ni todo 1 (situación normal): reste 123 (1023) del valor calculado para obtener el valor verdadero de E

2.E es todo 0: en este momento, IEEE754 estipula que E == 1-127 (1-1023), y M ya no suma el primer 1, sino que se restaura a un decimal de 0.xxxx... El propósito de esto es representar más y menos 0, así como números cercanos a 0.

3. Cuando E es todo 1: en este momento, los dígitos significativos M son todos 0, lo que significa que el número es más o menos infinito.

Con esto finaliza este conocimiento, espero que te sea de ayuda.

Supongo que te gusta

Origin blog.csdn.net/hffh123/article/details/132229285
Recomendado
Clasificación