ID do artigo: 125056 - Última revisão: quinta-feira, 24 de fevereiro de 2005 - Revisão: 2.1 INFO: A precisão e precisão em cálculos de ponto flutuante
Nesta páginaSumárioHá várias situações em que precisão, arredondamento, e precisão nos cálculos de ponto flutuante pode trabalhar para gerar resultados surpreendentes para o programador. Há quatro regras gerais que devem ser seguidas:
Mais InformaçõesEm geral, as regras descritas acima se aplicam a todos os idiomas, incluindo C, C++ e montador. Os exemplos abaixo demonstram alguns das regras usando FORTRAN PowerStation. Todos os exemplos foram compilados usando FORTRAN PowerStation 32 sem opções, exceto para o último, que está escrito na C. Consulte os manuais do FORTRAN fornecido com o Microsoft FORTRAN para uma descrição das constantes numéricas e artigo 36068 (http://support.microsoft.com/kb/36068/EN-US/ ) para obter uma descrição da representação interna dos valores de ponto flutuante. EXEMPLO 1O primeiro exemplo demonstra duas coisas:
x = 1.100000000000000 y = 1.100000023841858 true = 1.320000000000000 (multiplying 2 double precision values) y = 1.320000052452087 (multiplying a double and a single) z = 1.320000081062318 (multiplying 2 single precision values) Código de exemploEXEMPLO 2Exemplo 2 usa a equação quadrática. Ele demonstra que os cálculos de precisão dupla mesmo não são perfeitos e que o resultado de um cálculo deve ser testado antes que ele é dependentes se erros pequenos podem apresentar resultados drásticas. A entrada para a função raiz quadrada no exemplo 2 somente é negativa muito pouco, mas não é válido ainda. Se os cálculos de precisão dupla não tem erros leves, o resultado seria:Root = -1.1500000000 Erro em tempo de execução M6201: MATEMÁTICA -sqrt: erro de domínio Código de exemploEXEMPLO 3Exemplo 3 demonstra que devido à otimizações que ocorrer mesmo se a otimização não estiver ativada, valores podem temporariamente manter uma precisão maior que o esperado, e que é muito imprudente testar dois valores de ponto flutuante de igualdade.Neste exemplo, dois valores são iguais e não igual. No primeiro se, o valor de Z ainda está na pilha do co-processador e tem a mesma precisão como Y. X, portanto, não é igual Y e a primeira mensagem é impressa. No momento da se segundo, Z tinha a ser carregado na memória e, portanto, tinha a mesma precisão e o valor como X e a segunda mensagem também é impresso. Código de exemploEXEMPLO 4A primeira parte do código de exemplo 4 calcula a menor diferença possível entre dois números próximo a 1.0. Ele faz isso adicionando um único bit a representação binária de 1.0.x = 1.00000000000000000 (one bit more than 1.0) y = 1.00000000000000000 (exactly 1.0) x-y = .00000000000000022 (smallest possible difference) A segunda parte do código de exemplo 4 calcula a menor diferença possível entre os 2 números perto para 10.0. Novamente, ele faz isso adicionando um único bit a representação binária de 10.0. Observe que a diferença entre os números quase 10 é maior do que a diferença próximo a 1. Isso demonstra o princípio geral que quanto maior o valor absoluto de um número, com menor precisão ele pode ser armazenado em um determinado número de bits. x = 10.00000000000000000 (one bit more than 10.0) y = 10.00000000000000000 (exactly 10.0) x-y = .00000000000000178 x = 4024000000000001 Hex y = 4024000000000000 Hex x = 3FF0CCCCCCCCCCCD (Hex representation of 1.05D0) x-1 = .05000000000000004 Código de exemploEXEMPLO 5No C, constantes flutuantes são duplicatas por padrão. Use um "f" para indicar um valor de ponto flutuante, como em "89.95f".A informação contida neste artigo aplica-se a:
Tradução automáticaIMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado. Clique aqui para ver a versão em Inglês deste artigo: 125056
(http://support.microsoft.com/kb/125056/en-us/
)
| Outros Recursos Outros Sites de Suporte
ComunidadesTraduções deste artigo |






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email


Voltar para o início