"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 > Como garantir precisão precisa de ponto flutuante em C++?

Como garantir precisão precisa de ponto flutuante em C++?

Publicado em 2024-11-16
Navegar:605

How to Ensure Accurate Floating-Point Precision in C  ?

Precisão de ponto flutuante em C

Ao lidar com números de ponto flutuante em C , é essencial entender suas limitações de precisão. Considere o seguinte código:

double a = 0.3;
std::cout.precision(20);
std::cout 

O resultado é 0,2999999999999999889 em vez de 0,3, indicando uma perda de precisão. Para resolver isso, C fornece a constante std::numeric_limits::digits10, onde T é o tipo do número de ponto flutuante. Esta constante representa o número máximo de dígitos significativos que podem ser representados com precisão.

Veja como usar std::numeric_limits::digits10 para definir a precisão corretamente:

#include 
#include 
int main()
{
        double a = 0.3;
        std::cout.precision(std::numeric_limits::digits10);
        std::cout ::digits10);
        std::cout 

Este código define a precisão para o número máximo de dígitos significativos que podem ser representados com precisão por um duplo. Como resultado, a saída será 0,3 em ambos os casos.

No entanto, é importante observar que mesmo com essa abordagem, erros acumulados podem ocorrer se o loop iterar significativamente mais de 50 vezes. Isso ocorre porque os números de ponto flutuante são uma aproximação e os erros podem se acumular ao longo de uma série de operações. Para lidar com tais situações, é recomendado o uso de bibliotecas que fornecem aritmética de precisão arbitrária, como Boost.Multiprecision.

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