"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Por que a aritmética de ponto flutuante em C++ leva a erros de precisão?

Por que a aritmética de ponto flutuante em C++ leva a erros de precisão?

Publicado em 2024-11-24
Navegar:342

Why Does Floating-Point Arithmetic in C   Lead to Precision Errors?

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.

Tutorial mais recente Mais>

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