JavaRush /Blogue Java /Random-PT /Números reais na memória do computador. Explicação.
Marianna
Nível 9
Москва

Números reais na memória do computador. Explicação.

Publicado no grupo Random-PT
Boa tarde Ao estudar a palestra “Nuances de trabalhar com números reais” da primeira missão (seção 2. A estrutura dos números de ponto flutuante) e palestras adicionais sobre o tema, muitos devem ter encontrado muitas dúvidas sobre este tema. Inicialmente, tentei me dar as respostas necessárias e agora as ofereço a você para ajudá-lo a compreender completamente em uma ordem lógica consistente. 1. Sistemas de numeração decimal e binária. 1.1 O sistema numérico decimal é um dos sistemas mais comuns; é aquele que usamos para quaisquer cálculos matemáticos não computacionais na escola, na universidade, na vida. Utiliza os números 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 (árabe) - 10 dígitos no total. Há também uma notação romana para números, que, no entanto, praticamente não é usada atualmente. No sistema decimal a contagem é realizada em unidades, dezenas, centenas, milhares, dezenas de milhares, centenas de milhares, milhões, etc. - em outras palavras, estes são todos os dígitos do número. O dígito de um número é a posição (lugar) do dígito no registro do número. O dígito mais baixo dos números naturais (e o menos significativo ) é o dígito das unidades (mais à direita). Por que ele é o mais insignificante? Porque ao eliminar o dígito da unidade de um número, o próprio número mudará minimamente (por exemplo, os números 345 e 340). Em seguida, o segundo dígito é o dígito das dezenas, etc. O que tudo isso significa? Vamos pegar qualquer número inteiro do sistema decimal e decompô-lo em dígitos . 3297 = 3*1000 + 2*100 + 9*10 + 7 Assim, descobrimos que o número 3297 contém 3 unidades do quarto dígito (ou seja, 3 mil), 2 unidades do terceiro dígito (2 centenas), 9 unidades do segundo algarismo (9 dezenas) e 7 unidades do primeiro algarismo . Em outras palavras, esse número é três mil duzentos e noventa e sete e é, portanto, posicional . E quanto aos dígitos dos números fracionários (reais) ? Os dígitos dos números fracionários (sua parte fracionária) são chamados: décimos, centésimos, milésimos, dez milésimos, etc. Quanto mais distante o dígito estiver da vírgula (de toda a parte do número), menos significativo ele será (descartando-o, o valor do número mudará pouco). Por exemplo, vamos pegar qualquer número fracionário apresentado como decimal: 25,076 = 2*10 + 5 +0*0,1 + 7*0,01 +6*0,001 Assim, descobrimos que o número fracionário 25,076 contém 2 dezenas, 5 unidades, 0 décimos , 7 centésimos e 6 milésimos. O sistema decimal usa 10 dígitos e múltiplos de 10 casas – daí o nome “decimal”. 1.2 O sistema numérico binário é um sistema numérico usado em quase todos os computadores modernos e outros dispositivos eletrônicos de computação. Para registrar números, ele usa apenas dois dígitos - 0 e 1. Para não confundir em qual sistema numérico o número está escrito, ele é fornecido com um indicador no canto inferior direito (é a base do sistema numérico ), para exemplo: 1000₁₀ 1000₂ Aqui o primeiro número é o familiar mil no sistema decimal, e o inferior é o número na representação do sistema binário e é igual no sistema decimal... 8 ! Assim como o sistema decimal, o sistema binário também decompõe os números em dígitos . Cada dígito em um número binário é chamado de bit (ou dígito ). (Se alguém estiver interessado, quatro bits é um nibble (ou tétrade), 8 bits é um byte , 16 bits é uma palavra , 32 bits é uma palavra dupla ). Os bits (dígitos) também são numerados da direita para a esquerda, começando do zero (diferentemente do sistema decimal). O bit direito menos significativo e menos significativo tem um número de sequência de 0 . Em seguida vem o primeiro bit, o segundo , etc., quanto mais antigo o bit, mais significativo ele é (por analogia com o sistema decimal entendemos - se você remover os uns do número 1455, ficará com o número 1450 - quase igual ao inicial. Mas se você retirar as centenas, ficará com o número 1050, que já está longe do valor inicial, porque a casa das centenas é muito mais significativa (de ordem superior) do que a casa das unidades ). Exemplo. NÃO LEIA AINDA :))) Números reais na memória do computador.  EM DESENVOLVIMENTO!!!  - 2 Na parte inferior, os bits desse número binário fracionário são numerados em vermelho – no total temos 18 bits (dígitos) desse número. Olhando para o futuro, gostaria de observar que os números fracionários são armazenados na memória do computador de uma maneira completamente diferente - isso será discutido mais adiante. Enquanto isso, vamos aprender como converter números de um sistema numérico para outro. 2. Conversão de inteiros e frações do sistema decimal para o sistema binário e vice-versa. 2.1 Conversão de decimal para binário. 2.1.1 Inteiros. Para converter um número decimal inteiro para o sistema numérico binário, você precisa dividir esse número por 2, anotar o resto da divisão (é sempre igual a 0 ou 1, dependendo se o número é par ou ímpar) , e divida novamente o resultado da divisão por 2, anote novamente o restante da divisão (0 ou 1), e divida novamente o resultado da segunda divisão por 2. Continue assim até que o resultado da divisão seja igual a um. A seguir, anotamos todos os zeros e uns resultantes na ordem inversa , começando pelo resultado da divisão mais recente, que é sempre igual a 1. Nota importante. O resultado final da divisão sequencial de QUALQUER INTEIRO por 2 sempre será um (1)! Se o resultado for maior que 1, continuamos a dividir esse resultado por 2 até obtermos um como resultado. E o resultado da divisão por 2 pode ser zero (0) apenas em um caso - esta é a divisão do próprio zero por 2. Exemplo. Vamos converter o número 145 do sistema decimal para binário. 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 ) Agora “coletamos” nosso número binário na ordem inversa. Obtemos o número 10010001. Pronto! Nuance interessante 1. Vamos converter o número 1 do sistema decimal para binário. No sistema binário, esse número também será escrito como 1. Afinal, o resultado final da divisão por 2, que deveria ser igual a 1, já é igual ao próprio número 1. 1₁₀ = 1₂ Nuance interessante 2. Vamos converter o número 0 do sistema decimal para binário. No sistema binário, este número também será escrito como 0. 0₁₀ = 0₂ 2.1.2 Números fracionários. Como converter números fracionários em binários? Para converter uma fração decimal para o sistema numérico binário, você deve: a) converter toda a parte da fração para o sistema binário de acordo com o algoritmo estudado no parágrafo 2.1.1 b) multiplicar a parte fracionária da fração por 2 , escrever o dígito resultante do resultado ANTES da vírgula decimal (sempre igual a 0 ou 1, o que é lógico), então SOMENTE multiplique novamente a parte fracionária do resultado obtido por 2, anote o dígito resultante do resultado ANTES da vírgula decimal (0 ou 1) e assim sucessivamente até a fração parte do resultado da multiplicação torna-se igual a 0 ou até que o número necessário de casas decimais ( precisão necessária ) (igual ao número de multiplicações por 2). Então você precisa anotar a sequência resultante de zeros e uns escritos EM ORDEM após o ponto que separa as partes inteiras e fracionárias do número real (fracionário). Exemplo 1. Vamos converter o número 2,25 (2 vírgula 25 centésimos) do sistema decimal para o sistema binário. No sistema binário a fração será igual a 10,01 . Como conseguimos isso? O número consiste em uma parte inteira (até certo ponto) - é 2 e uma parte fracionária - é 0,25. 1) Tradução da parte inteira: 2/2 = 1 (resto 0 ) A parte inteira será 10 . 2) Tradução da parte fracionária. 0,25 * 2 = 0,5 (0) 0,5 * 2 = 1,0 (1) A parte fracionária tornou-se igual a 0 como resultado de multiplicações sucessivas por 2. Paramos de multiplicar. Agora “coletamos” a parte fracionária EM ORDEM - obtemos 0,01 no sistema binário. 3) Some as partes inteiras e fracionárias - obtemos que a fração decimal 2,25 será igual à fração binária 10,01 . Exemplo 2. Vamos converter o número 0,116 do sistema decimal para o sistema binário. 0,116 * 2 = 0,232 (0) 0,232 * 2 = 0,464 (0 ) 0,464 * 2 = 0,928 (0) 0,928 * 2 = 1,856 (1) //descarte a parte inteira deste resultado 0,856 * 2 = 1,712 (1 ) //descarte toda a parte deste resultado 0,712 * 2 = 1 , 424 (1) //descarte toda a parte deste resultado 0,424 * 2 = 0 , 848 (0) Como podemos ver, a multiplicação continua indefinidamente , a parte fracionária do resultado não se torna igual a 0. Então decidimos que converteremos nossa fração decimal em binária com precisão de 7 casas decimais (bits) após o ponto (na parte fracionária). Lembremos o que estudamos sobre bits insignificantes - quanto mais longe o bit (bit) estiver da parte inteira, mais fácil será negligenciá-lo (explicação na seção 1 da palestra, quem esqueceu). Obtemos a fração binária 0,0001110 com uma precisão de 7 bits após o ponto. 2.2 Conversão de binário para decimal. 2.2.1 Inteiros. Para traduzir o todonúmero do sistema numérico binário para decimal, é necessário dividir esse número em dígitos (bits) e multiplicar cada dígito (bit) pelo número 2 até um certo grau positivo (este grau começa a contar da direita para a esquerda a partir do menos significativo (bit direito) e começa em 0 ) . Em outras palavras, a potência de dois é igual ao número de um determinado bit (mas esta regra não escrita só pode ser usada no caso de conversão de inteiros , pois para números fracionários a numeração dos bits começa na parte fracionária, que é traduzida no sistema decimal de forma diferente ). Em seguida, você precisa somar os produtos resultantes. Exemplo. Vamos converter o número binário 110011 para o 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, obtemos o número 51 no Sistema Binário . Para informação, segue abaixo uma tabela das primeiras potências do número 2 . NÃO LEIA AINDA :))) Números reais na memória do computador.  EM DESENVOLVIMENTO!!!  - 5 ! Observe que a potência zero de um número é sempre 1. 2.2.2 Números fracionários. Para converter um número binário fracionário (real) em decimal , é necessário: a) converter sua parte inteira em decimal conforme algoritmo do parágrafo 2.2.1 ; b) traduza sua parte fracionária da seguinte forma. É necessário apresentar a parte fracionária como a soma dos produtos dos algarismos por dois , elevado a uma certa potência negativa (a potência do primeiro algarismo após o ponto (após toda a parte da fração) será igual a -1, para o segundo dígito após o ponto será igual a -2, etc.) Resultado este valor será a parte fracionária do número no sistema decimal. Exemplo. Vamos converter o número 10111.01 para o sistema binário. 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, obtemos o número 23,25 no sistema numérico decimal. A tabela das primeiras potências negativas de 2 é fornecida abaixo. NÃO LEIA AINDA :))) Números reais na memória do computador.  EM DESENVOLVIMENTO!!!  - 7 2.2.3 Fórmula geral para conversão de números binários em decimais. Vamos dar uma fórmula geral para converter números de binário em decimal (partes inteiras e fracionárias). NÃO LEIA AINDA :))) Números reais na memória do computador.  EM DESENVOLVIMENTO!!!  - 4 onde A é um número no sistema numérico binário; A base do sistema numérico é 2 (o que significa que cada bit é multiplicado por 2 elevado à potência); n— número de dígitos inteiros (bits) ; m é o número de dígitos fracionários (bits) do número . O primeiro bit da parte inteira do ponto de divisão é destacado em vermelho . É sempre multiplicado por 2 elevado a zero. O próximo bit antes dele (à esquerda) é multiplicado por 2 elevado à primeira potência, etc. O primeiro bit da parte fracionária do ponto de divisão é destacado em verde . É sempre multiplicado por 2 elevado a menos a primeira potência. O próximo bit à direita é multiplicado por 2 elevado a menos segunda potência, etc. 3. Notação científica: uma notação normalizada em ambos os sistemas. Mantissa, expoente, grau de expoente. 3.1 Forma exponencial de escrever um número. Anteriormente, estudamos um esquema detalhado para registrar números posicionais por dígito. Vamos pegar o número 0.00000000000000000016 . Tem uma entrada muito longa no formato padrão . E na forma exponencial ficará assim: 1,6 * 10ˉ²¹ Então, qual é a forma exponencial de um número e como representá-lo nesta forma? A notação científica para um número é uma representação de números reais como mantissa e expoente . Prático para representar números muito grandes e muito pequenos, bem como para unificar sua escrita. N = M * pⁿ onde N é o número a ser escrito, M é a mantissa do número, p é a base (igual à base do sistema numérico do número fornecido), n (inteiro) é a ordem (grau , pode ser positivo e negativo), p elevado a n são os números característicos (expoente, ou seja, base elevada a uma potência (ordem)). Uma nuance importante. Se a parte inteira do número decimal for diferente de 0 , então a ordem (grau) do expoente será positiva , se a parte inteira for igual a 0 , o grau do expoente será negativo . 3.2 Forma normal e normalizada de escrita de números. A forma normal de um número é aquela em que a mantissa (sem levar em conta o sinal) está localizada no meio intervalo [0,1], ou seja, 0 <= M < 1. Esta forma de escrita tem um desvantagem: alguns números são escritos de forma ambígua (por exemplo, 0,0001 pode ser escrito como 0,000001*10², 0,00001⋅10¹, 0,0001⋅10º, 0,001⋅10ˉ¹ e assim por diante). Portanto, outra forma de registro é difundida (especialmente na ciência da computação) - normalizada, em que a mantissa de um número decimal assume valores de 1 (inclusivo) a 10 (exclusivo), ou seja, 1 <= M < 10 (da mesma forma, a mantissa de um número binário assume valores de 1 a 2 ). Em outras palavras, a mantissa no sistema decimal deve ser um número fracionário de 1,0 (inclusivo) a 10 (exclusivo) , ou seja, a parte inteira da mantissa deve conter um único dígito e a parte fracionária não é limitada matematicamente. A vantagem da forma normalizada é que, assim, qualquer número (exceto 0) é escrito de forma única. A desvantagem é que é impossível representar 0 nesta forma, portanto a representação de números na ciência da computação fornece um sinal especial (bit) para o número 0. 3.3 Exemplos de escrita de números decimais na forma normalizada exponencial. Vejamos exemplos. Exemplo 1. Vamos escrever o número decimal 1015000 (um milhão e quinze mil) na forma normalizada exponencial. O sistema numérico desse número é decimal, então a base será 10 . Vamos selecionar a mantissa . Para isso, imagine o número como uma fração, cuja parte fracionária será igual a zero (já que o número é um número inteiro): 1000000,0. Se a parte inteira do número for maior que 0 , mova o ponto para a esquerda de sua posição inicial (dentro da parte inteira) até que reste apenas um dígito na parte inteira . Depois disso colocamos um ponto final. Descartamos zeros insignificantes (no final do número). Obtemos a mantissa do número igual a 1,015 . Vamos determinar o grau (ordem) da base do número. Quantas posições para a esquerda nosso ponto que separa as partes inteiras e fracionárias se moveu? Para seis posições. Isso significa que o pedido será 6 . Neste caso, a ordem é positiva (movemos o ponto na parte inteira do número diferente de 0). A entrada final na forma normalizada: 1.015 * 10⁶ . Podemos escrever este número desta forma: 1.015E6 (onde E6 é o expoente de um número decimal, ou seja, 10 elevado à 6ª potência). Vamos nos testar . A notação exponencial para um número nada mais é do que o produto de um número (mantissa) por outro número (expoente). O que acontece se você multiplicar 1,015 por 10⁶? 1,015*10⁶ = 1,015*1000000 = 1015000 . Isso mesmo. Esta abordagem (normalizada) ajuda a criar um registro inequívoconúmeros na forma exponencial, conforme indicado acima. Exemplo 2. Vamos escrever o número real decimal 0,0098 na forma normalizada. Vamos destacar a base do número - é igual a 10 (sistema numérico decimal). Vamos selecionar a mantissa do número - é igual a 9,8 (a parte inteira do número é igual a zero, o que significa que movemos o ponto para a direita até o primeiro dígito significativo (localizado no intervalo de 1 a 9 inclusive) . Determinamos a ordem do número - movemos o ponto três posições, o que significa que a ordem é 3. Positivo, é negativo ou negativo? Como movemos o ponto para a direita (na parte fracionária do número), o a ordem (potência) será negativa . O registro final do número na forma normalizada é 9,8 * 10ˉ³ ou 9,8E-3 . Vamos verificar novamente. Multiplique 9,8 por 10ˉ³. 9,8 * 10ˉ³ = 9,8 * 0,001 = 0,0098 . Isso mesmo. Exemplo 3. Vamos escrever o número real decimal 3,56 na forma normalizada. Selecione a base do número - é igual a 10 (sistema de numeração decimal). Selecione a mantissa do número - é igual a... 3,56 (o inteiro parte do número é um único dígito, diferente de 0. Isso significa que o ponto não precisa ser deslocado para lugar nenhum, o próprio número será a mantissa.) Vamos destacar a ordem da base: Por qual número deve a mantissa , igual ao próprio número, ser multiplicado para que não mude? Por unidade. Isso significa que a ordem será zero. O registro final do número na forma normalizada é 3,56 * 10º ou 3,56E0. 4. Armazenamento de números reais na memória do computador: float e double. 4.1 Tipos float e double. Vamos passar para a seção principal de nossa palestra. Como já sabemos, existem dois tipos de números reais em Java: float e double . O tipo float ocupa 32 bits na memória do computador e pode assumir valores na faixa [3.4E-38; 3.4E+38) (ou seja, na faixa de 3,4*10ˉ³⁸ (inclusive) a 3,4 * 10³⁸ (excluindo)). Nuance importante 1. Os números flutuantes podem ser positivos ou negativos. Este intervalo acima é apresentado para indicar os módulos de números incluídos no intervalo flutuante. Nuance importante 2. 10³⁸ é aproximadamente igual a 2¹²⁷ , respectivamente, 10 ˉ³⁸ é aproximadamente igual a 2ˉ¹²⁷ . Assim, o intervalo de valores absolutos dos números flutuantes pode ser escrito como [3,4 * 2ˉ¹²⁷; 3,4*2¹²⁷). O tipo duplo ocupa o dobro da memória do computador -64 bits e pode aceitar valores decimais na faixa [-1,7E+308; 1,7E+308) respectivamente. 4.2 Forma normalizada exponencial de números binários. Sabemos que os números são armazenados em formato binário na memória do computador. Então, vamos pegar o número 1560.256 (tipo float) e convertê-lo para o sistema binário na forma posicional: 11000011000.01000001100 . Você pode pensar que é assim que ele será armazenado na memória do computador. Mas isso não é verdade! Na memória do computador, os tipos float e double ( tipos reais de ponto flutuante ) são armazenados na forma normalizada exponencial , mas a base da potência é 2 em vez de 10. Isso se deve ao fato de que, como dito acima, todos os dados em o computador é representado em formato binário (bits). Uma certa quantidade de memória do computador é alocada para um número. Vamos representar o número positivo 15,2 na forma exponencial normalizada: 1,52*10¹ . A seguir, vamos representar seu “gêmeo” binário 1111.00110011001 também em notação exponencial normalizada, usando o mesmo algoritmo: 1) A base será igual a 2 2) A mantissa será igual a 1,11100110011001 3) O grau será positivo e igual a 3 (o ponto é deslocado 3 bits para a esquerda) no sistema decimal. Vamos convertê-lo para o sistema binário: 11 . Portanto, na forma normalizada exponencial binária seria 1,11100110011001 * 2¹¹. 4.3 Armazenando a forma binária normalizada exponencial de um número flutuante na memória do computador. Então, descobrimos que um número real será armazenado na memória do computador na forma binária normalizada exponencial . Como ficará na memória? Vamos pegar o tipo float . O computador aloca 32 bits para cada número flutuante . Eles são distribuídos da seguinte forma . Esta figura mostra esquematicamente a memória alocada para um número flutuante de 32 bits em um computador. NÃO LEIA AINDA :))) Números reais na memória do computador.  EM DESENVOLVIMENTO!!!  - 5 A numeração dos bits é indicada em vermelho . Verde indica um pedaço de memória alocada (1 bit) para armazenar o sinal do número. Amarelo indica um pedaço de memória alocada para armazenar a potência deslocada (ordem) da forma exponencial do número (8 bits). Azuldenota um pedaço de memória alocada para armazenar a mantissa normalizada de um número sem uma unidade implícita (23 bits). Vamos olhar mais de perto. 1) Sinal de bit. O bit mais significativo (primeiro da esquerda) é sempre alocado para armazenar o sinal do número (1 se o número for negativo e 0 se o número for positivo). Uma exceção pode ser o número zero - na programação, zero pode ser negativo e positivo . 2) Em seguida vêm os bits do grau (ordem) do expoente com base 2 . Para isso, são alocados 8 bits. O grau expoente dos números flutuantes , como sabemos, pode ser tanto negativo (para números cuja parte inteira é 0, ver parágrafo 3.3) quanto positivo (para números cuja parte inteira é diferente de zero) e varia de 2ˉ¹²⁷ a 2¹²⁷ . Em teoria, deveríamos alocar um bit para determinar o sinal do expoente, como é o caso do bit de sinal. Mas isso não é verdade. Para não perder um pouco na determinação do sinal do expoente, os números flutuantes adicionam um deslocamento ao expoente de meio byte +127 (0111 1111). Assim, em vez de uma faixa de potências de 2ˉ¹²⁷ a 2¹²⁷, o computador armazena uma faixa de potências de 0 a +254 – todos os valores de potência são positivos , não há necessidade de desperdiçar um byte extra no sinal. Acontece que o valor do expoente é deslocado pela metade em relação ao valor possível. Isso significa que para obter o valor real do expoente, deve-se subtrair esse deslocamento do valor armazenado na memória. Se o valor do expoente armazenado na memória for menor que o deslocamento (+127), então o expoente é negativo: isso é lógico. Exemplo. Vamos realizar uma mudança de grau negativo -18 . Adicionamos a ele o deslocamento +127, obtemos o valor do grau +108 (não esqueça o grau 0 no cálculo). Vamos converter o grau para a forma binária: 1101100 Mas 8 bits de memória são alocados para o grau e aqui obtemos um número de 7 bits. No lugar do dígito alto (bit) vazio e desocupado, o computador adiciona 0. O resultado é que esse grau será armazenado na memória do computador como 01101100 . Vejamos: +108 < +127, o que significa que o grau é realmente negativo. Considere a seguinte tabela interessante: Ela mostra todos os valores possíveis das potências das formas normalizadas de números flutuantes em sistemas binários e decimais. Como podemos ver, no sistema binário +127 é exatamente metade de um byte inteiro (8 bits). 3) Os 23 bits restantes são reservados para a mantissa NÃO LEIA AINDA :))) Números reais na memória do computador.  EM DESENVOLVIMENTO!!!  - onze. Mas para uma mantissa binária normalizada, o bit mais significativo (também conhecido como a parte inteira da mantissa normalizada) é sempre igual a 1 (chamado implícito ), uma vez que o número da mantissa está no intervalo 1<=M<2 (e lembre-se também do parágrafo 2.1.1 da palestra). A única exceção é o número 0. Não faz sentido escrever uma unidade nos 23 bits alocados e desperdiçar memória, então o restante da mantissa (sua parte fracionária) é gravado nos 23 bits alocados. Acontece que essencialmente a parte significativa do número flutuante tem um comprimento de 24, dos quais um bit a menos é armazenado. Uma nuance importante. Lembremos que ao converter números fracionários decimais em números binários, a parte fracionária no sistema binário muitas vezes acabava sendo enorme. E só temos 32 bits para armazenar um número flutuante. Neste caso, os dígitos mais baixos e menos significativos da fração binária (lembre-se do parágrafo 2.1.2 desta aula) não serão incluídos na memória alocada e o computador os negligenciará . A precisão do número será perdida , mas, veja bem, é mínima. Em outras palavras, a precisão dos números flutuantes fracionários é de 6 a 7 casas decimais. 4.4 Armazenando a forma binária normalizada exponencial do número duplo na memória do computador. Os números reais do tipo double são armazenados na memória do computador da mesma forma que os números float, com exceção de algumas características. Um número duplo possui 64 bits na memória do computador. Estão distribuídos da seguinte forma (também da esquerda para a direita): 1) Bit de sinal (ver parágrafo 4.3). Entendemos que o número deste bit será 63 . 2) Grau (ordem). Números duplos recebem 11 bits para armazená-los . Também é realizada uma mudança de grau , mas para números duplos será igual a +1023. 3) Mantissa (parte significativa). Números duplos recebem 52 bits (dígitos) para armazená-los. Além disso, a parte inteira exata da mantissa ( unidade implícita ) não é armazenada na memória . Também é importante notar que a precisão das duplas fracionárias é de cerca de 16 casas decimais . 4.5 Exemplos de representação de um número real do sistema decimal na memória do computador. E o ponto final de nossa palestra será um exemplo de conversão de um número fracionário do sistema numérico decimal na forma de seu armazenamento na memória do computador para consolidar a compreensão do tema. Exemplo 1. Pegue um número-4,25 tipo flutuante. Vamos apresentá-lo na forma normalizada exponencial no sistema numérico binário, lembrando tudo o que abordamos nesta palestra. 1) Converta a parte inteira do número para a forma binária: 4/2 = 2 (resto da divisão 0 ) 2/2 = 1 (resto da divisão 0 ) A parte inteira será igual a 100 no sistema binário. 2) Converta a parte fracionária do número para a forma binária. 0,25*2 = 0,5 ( 0 ) 0,5*2 = 1,0 ( 1 ) A parte fracionária será igual a 0,01 no sistema binário. 3) Assim, -4,25₁₀ = -100,01₂ . 4) Vamos converter o número -100,01₂ na forma normalizada exponencial no sistema numérico binário (o que significa que a base da potência será 2). -100.01₂ = -1.0001 *2² Vamos converter o valor do grau do formato decimal para binário . 2/2 = 1 (resto 0 ) O grau é 10₂. Obtemos que o número -4,25₁₀ em sua forma binária exponencial normalizada será igual a -1,0001 * 2¹º Vamos anotar como ficará na memória do computador. O bit de sinal será 1 (número negativo). O deslocamento do expoente é igual a 2+127 = 129₁₀ = 10000001₂ Removemos o implícito da mantissa , obtemos 0001000000000000000000 ( preenchemos os bits desocupados de ordem inferior com zeros ). Resultado final. 1 10000001 00010000000000000000000 - é assim que o número -4,25 é armazenado na memória do computador. Exemplo 2. Converta o número flutuante 0,75₁₀ em um formato de armazenamento binário na memória do computador. O resultado deve ser 0 01111110 1000000000000000000000 . Obrigado pela atenção.
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION