"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment garantir une précision précise en virgule flottante en C++ ?

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

Publié le 2024-11-16
Parcourir:248

How to Ensure Accurate Floating-Point Precision in C  ?

Précision à virgule flottante en C

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

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

Le résultat est 0,299999999999999999889 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 :

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

Ce code définit la précision sur le 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.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3