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
Libérer: 2024-11-05 16:32:02
original
511 Les gens l'ont consulté

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;
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal