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

Embora variáveis ​​de ponto flutuante em C ++ pode resolver muitos problemas de cálculo, como o truncamento, eles têm algumas limitações próprias - o inverso 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 no mesmo grau como int

variáveis).

contando

Você não pode usar variáveis ​​de ponto flutuante em aplicações onde a contagem é importante. Isso inclui C ++ constrói essa contagem. C ++ não é possível verificar qual valor de número inteiro que significa 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 ao insistir em usar int valores quando a contagem está envolvido.

velocidade de cálculo

Historicamente, um processador de computador pode processar aritmética inteira mais rápido do que ele pode aritmética de ponto 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 efectuar 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 destas 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 lidar com cerca de 13 algarismos significativos. Isso pode causar problemas de arredondamento também.

Considere-se que 1 # 8260-3 é expressa como 0,333 # 133- numa sequência contínua. O conceito de uma série infinita faz sentido em matemática, mas não a um computador, porque tem uma exactidã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 pela saída 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 uma int é um skosh mais de 2 bilhões. O valor máximo de uma 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.

Somente os primeiros 13 dígitos ou mais de um duplo ter qualquer de significado os restantes 25 dígitos são ruído tendo sucumbido ao erro de arredondamento de ponto flutuante.

menu