Os limites de números de ponto flutuante em c ++

Embora variáveis ​​de ponto flutuante em C ++ pode resolver diversos problemas de cálculo, tais como truncagem, eles têm algumas limitações próprias - O reverso dos associados com variáveis ​​inteiras. variáveis ​​de ponto flutuante não pode ser usado para contar as coisas, são mais difíceis para o computador de manusear, e também sofrem de erro de arredondamento (embora não quase com a mesma intensidade como int

variáveis).

contando

Você não pode usar variáveis ​​de ponto flutuante em aplicações onde a contagem é importante. Isto inclui C ++ constrói essa contagem. C ++ não é possível verificar que o valor número inteiro entende-se por um número de ponto flutuante dado.

Por exemplo, é claro para você que 1,0 é 1, mas não tão claro para C ++. O que cerca de 0,9 ou 1,1? Caso estes também ser considerado como um? C ++ simplesmente evita o problema, insistindo em usar int Os valores de contagem, quando é envolvido.

velocidade de cálculo

Historicamente, um processador de computador pode processar aritmética inteira mais rápida do que ele pode aritmética de vírgula flutuante. Assim, enquanto um processador pode adicionar 1 milhão de números inteiros num determinado período de tempo, o mesmo processador pode ser capaz de realizar apenas 200.000 cálculos de ponto flutuante durante o mesmo período.

velocidade de cálculo está se tornando menos de um problema como microprocessadores chegar mais rápido. Além disso, hoje os microprocessadores de uso geral incluem um circuito especial de ponto flutuante a bordo para aumentar o desempenho dessas operações. No entanto, aritmética em valores inteiros é apenas um pedaço de um muito mais fácil e mais rápido do que realizar a mesma operação em valores de ponto flutuante.

Perda de precisão



Ponto flutuante flutuador variáveis ​​têm uma precisão de cerca de 6 dígitos e um tamanho de economia extra, versão double-força flutuador conhecido como um Duplo pode tratar cerca de 13 algarismos significativos. Isso pode causar problemas de arredondamento também.

Considere-se que 1/3 é expressa como 0,333 ... em uma seqüência contínua. O conceito de uma série infinita faz sentido em matemática, mas não a um computador, porque tem uma precisão finita. o FloatAverage programa de saídas 1,66667 como a média de 1, 2 e 2 - que é muito melhor do que a 0 a saída pela IntAverage versão, mas nem mesmo perto de uma sequência infinita.

C ++ pode corrigir erro de arredondamento em uma série de casos. Por exemplo, na saída, C ++ às vezes pode determinar que o usuário realmente significava 1 em vez de 0,999999. Em outros casos, mesmo C ++ não pode corrigir erro de arredondamento.

faixa não tão limitada

Apesar de Duplo tipo de dados tem um intervalo muito maior do que a de um número inteiro, é ainda limitado. O valor máximo para um int é um skosh mais de 2 bilhões. O valor máximo de um Duplo variável é de aproximadamente 10 elevado à potência 38. Isso é 1 seguido de 38 zeroes- ele come 2 bilhões para o pequeno almoço.

Apenas os primeiros 13 dígitos ou mais de um Duplo ter qualquer de significação os restantes 25 dígitos são ruído tendo sucumbido ao erro de arredondamento de ponto flutuante.


Publicações relacionadas