Maison >développement back-end >C++ >Comment garantir une précision précise en virgule flottante en C ?

Comment garantir une précision précise en virgule flottante en C ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-05 16:32:02509parcourir

How to Ensure Accurate Floating-Point Precision in C  ?

Précision à virgule flottante en C

Lorsque l'on traite des nombres à virgule flottante en C , il est essentiel de comprendre leurs limites de précision. Considérons le code suivant :

<code class="cpp">double a = 0.3;
std::cout.precision(20);
std::cout << a << std::endl;

Le résultat est 0,2999999999999999889 au lieu de 0,3, indiquant une perte de précision. Pour résoudre ce problème, C fournit la constante std::numeric_limits::digits10, où T est le type du nombre à virgule flottante. Cette constante représente le nombre maximum de chiffres significatifs pouvant être représentés avec précision.

Voici comment utiliser std::numeric_limits::digits10 pour définir correctement la précision :

<code class="cpp">#include <iostream>
#include <limits>
int main()
{
        double a = 0.3;
        std::cout.precision(std::numeric_limits<double>::digits10);
        std::cout << a << std::endl;
        double b = 0;
        for (char i = 1; i <= 50; i++) {
                  b = b + a;
        };
        std::cout.precision(std::numeric_limits<double>::digits10);
        std::cout << b << std::endl;
}</code>

Ce code fixe la précision au nombre maximum de chiffres significatifs pouvant être représentés avec précision par un double. En conséquence, le résultat sera de 0,3 dans les deux cas.

Cependant, il est important de noter que même avec cette approche, des erreurs accumulées peuvent se produire si la boucle itère beaucoup plus de 50 fois. En effet, les nombres à virgule flottante sont une approximation et les erreurs peuvent s'accumuler au cours d'une série d'opérations. Pour gérer de telles situations, il est recommandé d'utiliser des bibliothèques fournissant une arithmétique de précision arbitraire, telles que Boost.Multiprecision.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn