JavaRush /Blog Java /Random-ES /Números reales en la memoria de la computadora. Explicaci...
Marianna
Nivel 9
Москва

Números reales en la memoria de la computadora. Explicación.

Publicado en el grupo Random-ES
Buenas tardes Al estudiar la conferencia "Los matices del trabajo con números reales" de la primera misión (sección 2. La estructura de los números de coma flotante) y conferencias adicionales sobre el tema, muchos deben haber encontrado muchas preguntas sobre este tema. Inicialmente, traté de darme las respuestas necesarias y ahora te las ofrezco para ayudarte a comprenderlas completamente en un orden lógico coherente. 1. Sistemas numéricos decimales y binarios. 1.1 El sistema numérico decimal es uno de los sistemas más comunes; es el que utilizamos para cualquier cálculo matemático no informático en la escuela, en la universidad, en la vida. Utiliza los números 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 (árabe): 10 dígitos en total. También existe una notación romana para los números, que, sin embargo, prácticamente no se utiliza en la actualidad. En el sistema decimal el conteo se realiza en unidades, decenas, centenas, miles, decenas de miles, centenas de miles, millones, etc. - en otras palabras, estos son todos los dígitos del número. El dígito de un número es la posición (lugar) del dígito en el registro numérico. El dígito más bajo de los números naturales (y el menos significativo ) es el dígito de las unidades (el más a la derecha). ¿Por qué es el más insignificante? Porque al eliminar el dígito unitario de un número, el número en sí cambiará mínimamente (por ejemplo, los números 345 y 340). A continuación, el segundo dígito es el dígito de las decenas, etc. Qué significa todo esto? Tomemos cualquier número entero del sistema decimal y descompongamoslo en dígitos . 3297 = 3*1000 + 2*100 + 9*10 + 7 Así, encontramos que el número 3297 contiene 3 unidades del cuarto dígito (es decir, 3 mil), 2 unidades del tercer dígito (2 centenas), 9 unidades del segundo dígito (9 decenas) y 7 unidades del primer dígito . En otras palabras, este número es tres mil doscientos noventa y siete y, en consecuencia, es posicional . ¿ Qué pasa con los dígitos de los números fraccionarios (reales) ? Los dígitos de los números fraccionarios (su parte fraccionaria) se denominan: décimas, centésimas, milésimas, diezmilésimas, etc. Cuanto más lejos esté el dígito de la coma decimal (de la parte entera del número), menos significativo será (descartándolo, el valor del número cambiará poco). Por ejemplo, tomemos cualquier número fraccionario presentado como decimal: 25.076 = 2*10 + 5 +0*0.1 + 7*0.01 +6*0.001 Así, encontramos que el número fraccionario 25.076 contiene 2 decenas, 5 unidades, 0 décimas . , 7 centésimas y 6 milésimas. El sistema decimal utiliza 10 dígitos y múltiplos de 10 posiciones, de ahí el nombre "decimal". 1.2 El sistema numérico binario es un sistema numérico utilizado en casi todas las computadoras modernas y otros dispositivos electrónicos informáticos. Para registrar números, utiliza solo dos dígitos: 0 y 1. Para no confundir en qué sistema numérico está escrito el número, tiene un indicador en la parte inferior derecha (es la base del sistema numérico ), para ejemplo: 1000₁₀ 1000₂ Aquí el primer número es el familiar mil en el sistema decimal, y el de abajo es el número en la representación del sistema binario y es igual en el sistema decimal... 8 ! Al igual que el sistema decimal, el sistema binario también descompone los números en dígitos . Cada dígito de un número binario se llama bit (o dígito ). (Si alguien está interesado, cuatro bits es un cuarteto (o tétrada), 8 bits es un byte , 16 bits es una palabra , 32 bits es una palabra doble ). Los bits (dígitos) también se numeran de derecha a izquierda, comenzando desde cero (a diferencia del sistema decimal). El bit derecho menos significativo, menos significativo, tiene un número de secuencia de 0 . Luego viene el primer bit, el segundo , etc., cuanto más antiguo es el bit, más significativo es (por analogía con el sistema decimal lo entendemos: si eliminas los del número 1455, te quedará el número 1450). - casi igual al inicial, pero si quitas las centenas, te quedará el número 1050, que ya está lejos del valor inicial, porque la posición de las centenas es mucho más significativa (de orden superior) que la de las unidades. ). Ejemplo. NO LEER AÚN :))) Números reales en la memoria de la computadora.  ¡¡¡EN DESARROLLO!!!  - 2 En la parte inferior, los bits de este número binario fraccionario están numerados en rojo; en total tenemos 18 bits (dígitos) de este número. De cara al futuro, me gustaría señalar que los números fraccionarios se almacenan en la memoria de la computadora de una manera completamente diferente ; esto se discutirá más adelante. Mientras tanto, aprendamos cómo convertir números de un sistema numérico a otro. 2. Conversión de números enteros y fracciones del sistema decimal al sistema binario y viceversa. 2.1 Conversión de decimal a binario. 2.1.1 Números enteros. Para convertir un número decimal entero al sistema numérico binario, debe dividir este número entre 2 y anotar el resto de la división (siempre es igual a 0 o 1, dependiendo de si el número es par o impar). , y vuelve a dividir el resultado de la división entre 2, vuelve a anotar el resto de la división (0 o 1), y vuelve a dividir el resultado de la segunda división entre 2. Continúa de esta manera hasta que el resultado de la división sea igual a uno. A continuación, anotamos todos los ceros y unos resultantes en orden inverso , empezando por el resultado de la división más reciente, que siempre es igual a 1. Nota importante. ¡El resultado final de la división secuencial de CUALQUIER ENTERO entre 2 siempre terminará siendo uno (1)! Si el resultado es mayor que 1, continuamos dividiendo este resultado entre 2 hasta obtener uno como resultado. Y el resultado de la división por 2 puede ser cero (0) solo en un caso: esta es la división del cero mismo por 2. Ejemplo. Convirtamos el número 145 del sistema decimal a binario. 145/2 = 72 (resto 1 ) 72/2 = 36 (resto 0 ) 36/2 = 18 (resto 0 ) 18/2 = 9 (resto 0 ) 9/2 = 4 (resto 1 ) 4/2 = 2 (resto 0 ) 2/2 = 1 (resto 0 ) Ahora “recopilamos” nuestro número binario en orden inverso. Obtenemos el número 10010001. ¡Listo! Matiz interesante 1. Convirtamos el número 1 del sistema decimal a binario. En el sistema binario, este número también se escribirá como 1. Después de todo, el resultado final de la división por 2, que debería ser igual a 1, ya es igual al propio número 1. 1₁₀ = 1₂ Matiz interesante 2. Convirtamos el número 0 del sistema decimal al binario. En el sistema binario, este número también se escribirá como 0. 0₁₀ = 0₂ 2.1.2 Números fraccionarios. ¿Cómo convertir números fraccionarios a binarios? Para convertir una fracción decimal al sistema numérico binario, es necesario: a) convertir la parte entera de la fracción al sistema binario de acuerdo con el algoritmo estudiado en el párrafo 2.1.1 b) multiplicar la parte fraccionaria de la fracción por 2 , escribir el dígito resultante del resultado ANTES del punto decimal (siempre igual a 0 o 1, lo cual es lógico), luego SOLO multiplica la parte fraccionaria del resultado obtenido por 2 nuevamente, escribe el dígito resultante del resultado ANTES del punto decimal (0 o 1) y así sucesivamente hasta que el decimal parte del resultado de la multiplicación se vuelve igual a 0 o hasta que se alcance el número requerido de decimales ( precisión requerida ) (igual al número de multiplicaciones por 2). Luego, debe escribir la secuencia resultante de ceros y unos escritos EN ORDEN después del punto que separa las partes entera y fraccionaria del número real (fraccional). Ejemplo 1. Convirtamos el número 2,25 (2 punto 25 centésimas) del sistema decimal al sistema binario. En el sistema binario la fracción será igual a 10,01 . ¿Cómo conseguimos esto? El número consta de una parte entera (hasta cierto punto): 2 y una parte fraccionaria: 0,25. 1) Traducción de la parte entera: 2/2 = 1 (resto 0 ) La parte entera será 10 . 2) Traducción de la parte fraccionaria. 0,25 * 2 = 0 ,5 (0) 0,5 * 2 = 1 ,0 (1) La parte fraccionaria se volvió igual a 0 como resultado de multiplicaciones sucesivas por 2. Dejamos de multiplicar. Ahora "recopilamos" la parte fraccionaria EN ORDEN: obtenemos 0,01 en el sistema binario. 3) Suma las partes entera y fraccionaria: obtenemos que la fracción decimal 2,25 será igual a la fracción binaria 10,01 . Ejemplo 2. Convirtamos el número 0,116 del sistema decimal al sistema binario. 0.116 * 2 = 0.232 (0) 0.232 * 2 = 0.464 ( 0) 0.464 * 2 = 0.928 (0) 0.928 * 2 = 1.856 (1) //descarta la parte entera de este resultado 0.856 * 2 = 1 .712 (1 ) //descarta toda la parte de este resultado 0.712 * 2 = 1 .424 (1) //descarta toda la parte de este resultado 0.424 * 2 = 0 .848 (0) Como podemos ver, la multiplicación sigue y sigue , la parte fraccionaria del resultado no llega a ser igual a 0. Luego decidimos convertir nuestra fracción decimal a binaria con una precisión de 7 decimales (bits) después del punto (en la parte fraccionaria). Recordemos lo que estudiamos sobre los bits insignificantes : cuanto más lejos esté el bit (bit) de la parte completa, más fácil nos resulta descuidarlo (explicación en la sección 1 de la conferencia, quién lo olvidó). Obtenemos la fracción binaria 0,0001110 con una precisión de 7 bits después del punto. 2.2 Conversión de binario a decimal. 2.2.1 Números enteros. Para traducir todonúmero del sistema numérico binario al decimal, es necesario dividir este número en dígitos (bits) y multiplicar cada dígito (bit) por el número 2 hasta un cierto grado positivo (este grado comienza a contar de derecha a izquierda desde el menos significativo (bit derecho) y comienza desde 0 ). En otras palabras, la potencia de dos es igual al número de un bit dado (pero esta regla no escrita solo se puede usar en el caso de convertir números enteros , ya que para números fraccionarios la numeración de bits comienza en la parte fraccionaria, que se traduce al sistema decimal de forma diferente ). A continuación debe sumar los productos resultantes. Ejemplo. Convirtamos el número binario 110011 al sistema numérico decimal. 110011₂ = 1*2⁵ + 1*2⁴ + 0*2³ + 0*2² + 1*2¹ + 1*2º = 32 +16 +0 + 0 + 2 + 1 = 51₁₀ Como resultado, obtenemos el número 51 en el sistema binario . A título informativo, a continuación se muestra una tabla de las primeras potencias del número 2 . NO LEER AÚN :))) Números reales en la memoria de la computadora.  ¡¡¡EN DESARROLLO!!!  - 5 ! Tenga en cuenta que la potencia cero de un número es siempre 1. 2.2.2 Números fraccionarios. Para convertir un número binario fraccionario (real) a decimal , es necesario: a) convertir su parte entera a decimal según el algoritmo del párrafo 2.2.1 ; b) traduce su parte fraccionaria de la siguiente manera. Es necesario presentar la parte fraccionaria como la suma de los productos de dígitos por dos , elevado a una determinada potencia negativa (la potencia del primer dígito después del punto (después de la parte entera de la fracción) será igual a -1, porque el segundo dígito después del punto será igual a -2, etc.) Resultado: esta cantidad será la parte fraccionaria del número en el sistema decimal. Ejemplo. Convirtamos el número 10111.01 al sistema binario. 10111,01₂ = (1*2⁴ + 0*2³ + 0*2² + 1*2¹ + 1*2º) . (0*2ˉ¹ + 1*2ˉ²) = (16 + 0 + 4 + 2 + 1) . (0 + 0,25) = 23,25₁₀ Como resultado, obtenemos el número 23,25 en el sistema numérico decimal. A continuación se muestra la tabla de las primeras potencias negativas de 2. NO LEER AÚN :))) Números reales en la memoria de la computadora.  ¡¡¡EN DESARROLLO!!!  - 7 2.2.3 Fórmula general para convertir números de binario a decimal. Demos una fórmula general para convertir números de binario a decimal (tanto partes enteras como fraccionarias). NO LEER AÚN :))) Números reales en la memoria de la computadora.  ¡¡¡EN DESARROLLO!!!  - 4 donde A es un número en el sistema numérico binario; La base del sistema numérico es 2 (lo que significa que cada bit se multiplica por 2 elevado a la potencia); norte— número de dígitos enteros (bits) ; m es el número de dígitos fraccionarios (bits) del número . El primer bit de la parte entera desde el punto de división está resaltado en rojo . Siempre se multiplica por 2 elevado a cero. El siguiente bit anterior (a la izquierda) se multiplica por 2 elevado a la primera potencia, etc. El primer bit de la parte fraccionaria desde el punto de división está resaltado en verde . Siempre se multiplica por 2 elevado a menos la primera potencia. El siguiente bit a la derecha se multiplica por 2 elevado a menos el segundo, etc. 3. Notación científica: notación normalizada en ambos sistemas. Mantisa, exponente, grado del exponente. 3.1 Forma exponencial de escribir un número. Anteriormente, estudiamos un esquema detallado para registrar números posicionales por dígito. Tomemos el número 0.0000000000000000000016 . Tiene una entrada muy larga en forma estándar . Y en forma exponencial se verá así: 1,6 * 10ˉ²¹ Entonces, ¿cuál es la forma exponencial de un número y cómo representar un número en esta forma? La notación científica de un número es una representación de los números reales como mantisa y exponente . Conveniente para representar números muy grandes y muy pequeños, así como para unificar su escritura. N = M * pⁿ donde N es el número a escribir, M es la mantisa del número, p es la base (igual a la base del sistema numérico del número dado), n (entero) es el orden (grado , puede ser positivo y negativo), p elevado a n son los números característicos (exponente, es decir, base elevada a una potencia (orden)). Un matiz importante. Si la parte entera del número decimal es diferente de 0 , entonces el orden (grado) del exponente será positivo , si la parte entera es igual a 0 , el grado del exponente será negativo . 3.2 Forma normal y normalizada de escribir números. La forma normal de un número es una forma en la que la mantisa (sin tener en cuenta el signo) se ubica en el semiintervalo [0,1], es decir, 0 <= M < 1. Esta forma de escritura tiene una Desventaja: algunos números se escriben de forma ambigua (por ejemplo, 0,0001 se puede escribir como 0,000001*10², 0,00001⋅10¹, 0,0001⋅10º, 0,001⋅10ˉ¹, etc.). Por lo tanto, está muy extendida otra forma de grabación (especialmente en informática): la normalizada., en el que la mantisa de un número decimal toma valores del 1 (inclusive) al 10 (exclusivo), es decir, 1 <= M < 10 (de manera similar, la mantisa de un número binario toma valores del 1 al 2 ). En otras palabras, la mantisa en el sistema decimal debe ser un número fraccionario de 1,0 (inclusive) a 10 (exclusivo) , es decir la parte entera de la mantisa debe contener un solo dígito y la parte fraccionaria no está limitada matemáticamente. La ventaja de la forma normalizada es que, por tanto, cualquier número (excepto el 0) se escribe de forma única. La desventaja es que es imposible representar el 0 de esta forma, por lo que la representación de números en informática proporciona un signo especial (bit) para el número 0. 3.3 Ejemplos de escritura de números decimales en forma normalizada exponencial. Veamos ejemplos. Ejemplo 1. Escribamos el número decimal 1015000 (un millón quince mil) en forma exponencial normalizada. El sistema numérico de este número es decimal, por lo que la base será 10 . Seleccionemos la mantisa . Para hacer esto, imagine el número como una fracción, cuya parte fraccionaria será igual a cero (ya que el número es un número entero): 1000000,0. Si la parte entera del número es mayor que 0 , entonces mueve el punto a la izquierda de su posición inicial (dentro de la parte entera) hasta que solo quede un dígito en la parte entera . Después le ponemos un punto. Descartamos los ceros insignificantes (al final del número). Obtenemos la mantisa del número igual a 1,015 . Determinemos el grado (orden) de la base del número. ¿Cuántas posiciones hacia la izquierda se ha movido nuestro punto que separa las partes enteras y fraccionarias? Para seis posiciones. Esto significa que el orden será 6 . En este caso, el orden es positivo (movimos el punto en la parte entera del número distinto de 0). La entrada final en forma normalizada: 1.015 * 10⁶ . Este número lo podemos escribir de esta forma: 1.015E6 (donde E6 es el exponente de un número decimal, es decir, 10 a la sexta potencia). Pongámonos a prueba . La notación exponencial de un número no es más que el producto de un número (mantisa) y otro número (exponente). ¿Qué pasa si multiplicas 1,015 por 10⁶? 1,015*10⁶ = 1,015*1000000 = 1015000 . Así es. Este enfoque (normalizado) ayuda a crear un registro inequívoco.números en forma exponencial, como se indicó anteriormente. Ejemplo 2. Escribamos el número real decimal 0,0098 en forma normalizada. Resaltemos la base del número: es igual a 10 (sistema numérico decimal). Seleccionemos la mantisa del número: es igual a 9,8 (la parte entera del número es igual a cero, lo que significa que movemos el punto hacia la derecha hasta el primer dígito significativo (que se encuentra en el rango de 1 a 9 inclusive) Determinamos el orden del número : movimos el punto tres posiciones, lo que significa que el orden es 3. Positivo, ¿es negativo o negativo? Como movimos el punto hacia la derecha (en la parte fraccionaria del número), el El orden (potencia) será negativo . El registro final del número en forma normalizada es 9,8 * 10ˉ³ o 9,8E-3 . Comprobémoslo de nuevo. Multiplica 9,8 por 10ˉ³. 9,8 * 10ˉ³ = 9,8 * 0,001 = 0,0098 . Así es. Ejemplo 3. Escribamos el número real decimal 3.56 en forma normalizada. Seleccione la base del número - es igual a 10 (sistema de numeración decimal). Seleccione la mantisa del número - es igual a... 3.56 (el número entero parte del número es un solo dígito, no es igual a 0. Esto significa que no es necesario desplazar el punto a ninguna parte, el número en sí será la mantisa). Resaltemos el orden de la base: ¿A qué número debe corresponder la mantisa? , igual al número mismo, ¿se multiplicará para que no cambie? Por unidad. Esto significa que el orden será cero. El registro final del número en forma normalizada es 3,56 * 10º o 3,56E0. 4. Almacenamiento de números reales en la memoria de la computadora: flotantes y dobles. 4.1 Tipos flotante y doble. Pasemos a la sección clave de nuestra conferencia. Como ya sabemos, existen dos tipos de números reales en Java: flotantes y dobles . El tipo flotante ocupa 32 bits en la memoria de la computadora y puede tomar valores en el rango [3.4E-38; 3,4E+38) (en otras palabras, en el rango de 3,4*10ˉ³⁸ (inclusive) a 3,4 * 10³⁸ (excluido)). Matiz importante 1. Los números flotantes pueden ser positivos o negativos. Este rango anterior se presenta para indicar los módulos de números incluidos en el rango flotante. Matiz importante 2. 10³⁸ es aproximadamente igual a 2¹²⁷ , respectivamente, 10 ˉ³⁸ es aproximadamente igual a 2ˉ¹²⁷ . Por tanto, el intervalo de valores absolutos de números flotantes se puede escribir como [3,4 * 2ˉ¹²⁷; 3,4 * 2¹²⁷). El tipo doble ocupa el doble de memoria de la computadora.64 bits y puede aceptar valores decimales en el rango [-1,7E+308; 1,7E+308) respectivamente. 4.2 Forma exponencial normalizada de números binarios. Sabemos que los números se almacenan en forma binaria en la memoria de la computadora. Entonces, tomemos el número 1560.256 (tipo flotante) y convirtámoslo al sistema binario en forma posicional: 11000011000.01000001100 . Se podría pensar que así es como se almacenará en la memoria de la computadora. ¡Pero eso no es cierto! En la memoria de la computadora, los tipos float y double ( tipos reales de punto flotante ) se almacenan en forma exponencial normalizada , pero la base de la potencia es 2 en lugar de 10. Esto se debe al hecho de que, como se indicó anteriormente, todos los datos en la computadora se representa en forma binaria (bits). Se asigna una cierta cantidad de memoria de computadora a un número. Representemos el número positivo 15,2 en forma exponencial normalizada: 1,52*10¹ . A continuación, representemos su "gemelo" binario 1111.00110011001 también en notación normalizada exponencial, usando el mismo algoritmo: 1) La base será igual a 2 2) La mantisa será igual a 1.11100110011001 3) El grado será positivo e igual a 3 (el punto se desplaza 3 bits hacia la izquierda) en sistema decimal. Convirtámoslo al sistema binario: 11 . Entonces, en forma binaria exponencial normalizada sería 1.11100110011001 * 2¹¹. 4.3 Almacenamiento de la forma binaria normalizada exponencial de un número flotante en la memoria de la computadora. Entonces, descubrimos que un número real se almacenará en la memoria de la computadora en forma binaria normalizada exponencial . ¿Cómo se verá en la memoria? Tomemos el tipo flotante . La computadora asigna 32 bits para cada número flotante . Se distribuyen de la siguiente manera . Esta figura muestra esquemáticamente la memoria asignada para un número flotante de 32 bits en una computadora. NO LEER AÚN :))) Números reales en la memoria de la computadora.  ¡¡¡EN DESARROLLO!!!  - 5 La numeración de bits se indica en rojo . El verde indica una parte de la memoria asignada (1 bit) para almacenar el signo del número. El amarillo indica una parte de la memoria asignada para almacenar la potencia (orden) desplazada de la forma exponencial del número (8 bits). Azuldenota una porción de memoria asignada para almacenar la mantisa normalizada de un número sin una unidad implícita (23 bits). Miremos más de cerca. 1) Bit de signo. El bit más significativo (el primero desde la izquierda) siempre se asigna para almacenar el signo del número (1 si el número es negativo y 0 si el número es positivo). Una excepción puede ser el número cero : en programación, el cero puede ser tanto negativo como positivo . 2) Luego vienen los bits del grado (orden) del exponente con base 2 . Para ello se asignan 8 bits. El grado exponencial de los números flotantes , como sabemos, puede ser tanto negativo (para números cuya parte entera es 0, ver párrafo 3.3) como positivo (para números cuya parte entera es distinta de cero) y oscila entre 2ˉ¹²⁷ y 2¹²⁷ . En teoría, deberíamos asignar un bit para determinar el signo del exponente, como es el caso del bit de signo. Pero eso no es cierto. Para no perder un poco en determinar el signo del exponente, los números flotantes agregan un desplazamiento al exponente de medio byte +127 (0111 1111). Por lo tanto, en lugar de un rango de potencias de 2ˉ¹²⁷ a 2¹²⁷, la computadora almacena un rango de potencias de 0 a +254 ; todos los valores de potencia son positivos , no hay necesidad de desperdiciar un byte extra en el signo. Resulta que el valor del exponente se desplaza a la mitad con respecto al valor posible. Esto significa que para obtener el valor real del exponente, debes restar este desplazamiento del valor almacenado en la memoria. Si el valor del exponente almacenado en la memoria es menor que el desplazamiento (+127), entonces el exponente es negativo: esto es lógico. Ejemplo. Realicemos un desplazamiento de grado negativo -18 . Le sumamos el desplazamiento +127, obtenemos el valor del grado +108 (no olvides el grado 0 en el cálculo). Convirtamos el grado a forma binaria: 1101100 Pero se asignan 8 bits de memoria para el grado, y aquí obtenemos un número de 7 bits. En lugar del dígito alto (bit) vacío y desocupado, la computadora agrega 0. El resultado es que este grado se almacenará en la memoria de la computadora como 01101100 . Veamos: +108 < +127, lo que significa que el grado en realidad es negativo. Considere la siguiente tabla interesante: Muestra todos los valores posibles de las potencias de las formas normalizadas de números flotantes en sistemas binario y decimal. Como podemos ver, en el sistema binario +127 es exactamente la mitad de un byte completo (8 bits). 3) Los 23 bits restantes están reservados para la mantisa. NO LEER AÚN :))) Números reales en la memoria de la computadora.  ¡¡¡EN DESARROLLO!!!  - once. Pero para una mantisa binaria normalizada, el bit más significativo (también conocido como la parte entera de la mantisa normalizada) siempre es igual a 1 (llamado implícito ), ya que el número de la mantisa se encuentra en el rango 1<=M<2 (y Recuerde también el párrafo 2.1.1 de la conferencia). La única excepción es el número 0. No tiene sentido escribir una unidad en los 23 bits asignados y desperdiciar memoria, por lo que el resto de la mantisa (su parte fraccionaria) se escribe en los 23 bits asignados. Resulta que esencialmente la parte significativa del número flotante tiene una longitud de 24, de los cuales se almacena un bit menos. Un matiz importante. Recordemos que al convertir números fraccionarios decimales en números binarios, la parte fraccionaria en el sistema binario a menudo resultaba ser enorme. Y sólo tenemos 32 bits para almacenar un número flotante. En este caso, los dígitos más bajos y menos significativos de la fracción binaria (recuerde el párrafo 2.1.2 de esta lección) no se incluirán en la memoria asignada y la computadora los ignorará . Se perderá la precisión del número , pero, como ve, es mínima. En otras palabras, la precisión de los flotadores fraccionarios es de 6 a 7 decimales. 4.4 Almacenamiento de la forma binaria normalizada exponencial del número doble en la memoria de la computadora. Los números reales de tipo doble se almacenan en la memoria de la computadora de la misma manera que los números flotantes, con la excepción de algunas características. Un número doble tiene 64 bits en la memoria de la computadora. Se distribuyen de la siguiente manera (también en orden de izquierda a derecha): 1) Bit de signo (ver apartado 4.3). Entendemos que el número de este bit será 63 . 2) Grado (orden). A los números dobles se les asignan 11 bits para almacenarlo . También se realiza un desplazamiento de grados , pero para números dobles será igual a +1023. 3) Mantisa (parte significativa). A los números dobles se les asignan 52 bits (dígitos) para almacenarlos. Además, la parte entera exacta de la mantisa ( unidad implícita ) no se almacena en la memoria . También vale la pena señalar que la precisión de los dobles fraccionarios es de aproximadamente 16 decimales . 4.5 Ejemplos de representación de un número real del sistema decimal en la memoria de una computadora. Y el punto final de nuestra conferencia será un ejemplo de cómo convertir un número fraccionario del sistema numérico decimal a su forma de almacenamiento en la memoria de una computadora para consolidar la comprensión del tema. Ejemplo 1. Toma un número-4,25 tipo flotador. Presentémoslo en forma exponencial normalizada en el sistema numérico binario, recordando todo lo que cubrimos en esta conferencia. 1) Convertir la parte entera del número a forma binaria: 4/2 = 2 (resto de la división 0 ) 2/2 = 1 (resto de la división 0 ) La parte entera será igual a 100 en el sistema binario. 2) Convierte la parte fraccionaria del número a forma binaria. 0.25*2 = 0.5 ( 0 ) 0.5*2 = 1.0 ( 1 ) La parte fraccionaria será igual a 0.01 en el sistema binario. 3) Por tanto, -4,25₁₀ = -100,01₂ . 4) Convirtamos el número -100,01₂ a su forma exponencial normalizada en el sistema numérico binario (lo que significa que la base de la potencia será 2). -100.01₂ = -1.0001 *2² Convirtamos el valor del grado de formato decimal a binario . 2/2= 1 (resto 0 ) El grado es 10₂. Obtenemos que el número -4,25₁₀ en su forma binaria exponencial normalizada será igual a -1,0001 * 2¹º Anotamos cómo quedará en la memoria del ordenador. El bit de signo será 1 (número negativo). El desplazamiento del exponente es igual a 2+127 = 129₁₀ = 10000001₂ Eliminamos el uno implícito de la mantisa , obtenemos 000100000000000000000000 ( llenamos los bits de orden inferior desocupados con ceros ). Línea de fondo. 1 10000001 00010000000000000000000 : así es como se almacena el número -4,25 en la memoria de la computadora. Ejemplo 2. Convierta el número flotante 0,75₁₀ a un formato de almacenamiento binario en la memoria de la computadora. El resultado debería ser 0 01111110 100000000000000000000000 . Gracias por su atención.
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION