Função de fracas perdendo precisão
-
20-09-2019 - |
Pergunta
Eu tenho uma variável TDATETIME que recebe um valor no tempo de execução de 40510.416667. Quando extraio o tempo para uma variável do tipo TTime usando a função FRAC, ela a define como 0,41666666666. Por que mudou a precisão do valor e existe uma troca de retenção para reter a precisão do valor original, isto é. Para defini -lo como 0,416667.
Solução
Uma das razões para a perda de precisão é que o TDATETIME é um duplo, e o parâmetro e o valor de retorno do FRAC é estendido do tipo.
Ao converter pontos flutuantes de um tipo para outro, algum A precisão pode ser perdida. (O mesmo acontece ao fazer aritmética neles).
Para comparar o valor do float corretamente, você deve usar a função CompareValue da matemática da unidade.
Outras dicas
TDATETIME é um número de ponto flutuante. Alguns números não podem ser representados exatamente como um número de ponto flutuante. 0.416667 / 0,41666666666 parece ser outro.
Você pode arredondar para 5 ou 6 dígitos para exibição. Isso leva a precisão de cerca de 1 segundo.
O que todo cientista da computação deve saber sobre números de ponto flutuante deve ajudar, assim como o próprio Precisão do ponto flutuante - Isso fornecerá algumas informações detalhadas para ir com a resposta de Jeff.
Obrigado por toda a sua ajuda nisso, muito apreciada. Para contornar o meu ProBllen que surgiu devido à alteração na precisão, usei a função de comparação em vez do> = ou <= operadores para comparar os tempos.