Precisão de ponto flutuante em C
Em C , os números de ponto flutuante são precisos até um certo número de casas decimais. No entanto, existem limitações para essa precisão, o que pode levar a resultados inesperados.
Declaração do problema
Considere o seguinte snippet de código:
double a = 0.3;
std::cout.precision(20);
std::cout Conforme ilustrado, a é um pouco menor que 0,3, mas quando multiplicado por 50, b se torna um pouco maior que 15,0. Este desvio do resultado esperado pode ser atribuído às limitações da precisão do ponto flutuante.
Solução
Para obter os resultados corretos, é crucial evitar definir o precisão maior que a precisão disponível para o tipo numérico. O seguinte trecho de código revisado demonstra essa abordagem:
#include
#include
int main() {
double a = 0.3;
std::cout.precision(std::numeric_limits::digits10);
std::cout ::digits10);
std::cout Essa abordagem garante que a precisão seja definida como o máximo disponível para o tipo de dados duplo. É importante observar que se o loop fosse executado por um número significativamente maior de iterações, como 5.000 em vez de 50, o erro acumulado eventualmente se tornaria perceptível, independentemente da configuração de precisão. Esta é uma limitação inerente da aritmética de ponto flutuante.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3