Problèmes de précision des clés à virgule flottante dans Std:map
L'utilisation de valeurs à virgule flottante comme clés dans std::map pose des défis en raison de limitations de précision en virgule flottante. Un problème courant rencontré est l'incapacité de localiser une clé en raison de ce problème de précision.
Contre-mesures
-
Implémenter une fonction de comparaison personnalisée :
Encapsulez les clés doubles dans une classe et remplacez l'opérateur<(...) pour définir une fonction de comparaison qui gère les problèmes de précision en virgule flottante. Cependant, cette approche viole les exigences de classement du conteneur, conduisant potentiellement à un comportement imprévisible.
-
Utilisez un multimap ou un multiset :
Utilisez std::multimap ou std::multiset pour le stockage de clés à virgule flottante permet d'avoir plusieurs valeurs pour chaque clé, ce qui évite le risque de clés en double.
-
Introduisez une tolérance Epsilon :
Créez une fonction d'assistance qui applique un seuil epsilon lorsque interroger le conteneur. Cette fonction utilise la fonction égal_range pour trouver une plage de clés "suffisamment proches" de la clé cible, garantissant ainsi que le conteneur maintient l'ordre tout en permettant des correspondances approximatives.
Considérations
L'utilisation de clés à virgule flottante dans std::map ou std::set est généralement déconseillée. Cela peut conduire à un code peu fiable en raison de la fragilité inhérente aux valeurs à virgule flottante. Vous pouvez également envisager d'utiliser une structure de données différente qui répond mieux aux problèmes de précision en virgule flottante.
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