Maison > développement back-end > C++ > Comment pouvez-vous utiliser en toute sécurité des valeurs à virgule flottante comme clés dans `std::map` et éviter un comportement inattendu ?

Comment pouvez-vous utiliser en toute sécurité des valeurs à virgule flottante comme clés dans `std::map` et éviter un comportement inattendu ?

Mary-Kate Olsen
Libérer: 2024-11-12 14:57:02
original
349 Les gens l'ont consulté

How can you safely use floating point values as keys in `std::map` and avoid unexpected behavior?

Clés à virgule flottante dans std::map : éviter les comparaisons avec Epsilon

Lors de l'utilisation de types doubles comme clés dans un std::map, des problèmes de précision en virgule flottante peuvent survenir . La comparaison de valeurs à l'aide d'un seuil epsilon, bien que couramment utilisée, peut violer les exigences de commande des conteneurs et conduire à un comportement indéfini.

Pour résoudre ce problème, une approche plus sûre consiste à définir un opérateur de comparaison personnalisé pour gérer les valeurs NaN et éviter les clés directes. comparaisons. De plus, l'utilisation de std::multimap ou std::multiset peut prendre en charge plusieurs valeurs de clé, réduisant ainsi le risque de comportement inattendu.

Pour effectuer des recherches approximatives à l'aide de clés doubles, une fonction d'assistance peut être utilisée pour renvoyer une plage de éléments proches de la valeur cible, contrôlés par un paramètre epsilon. Cette plage peut ensuite être parcourue pour localiser la clé souhaitée si elle existe. Alternativement, une fonction de vérification de l'existence des clés peut être implémentée sur la base de la recherche de plage.

Il est généralement conseillé d'éviter d'utiliser des valeurs à virgule flottante comme clés dans std::set ou std::map en raison de leur potentiel à introduire erreurs. Les exclure de l’interface plus précise peut atténuer le risque de bugs causés par des comparaisons de valeurs inattendues. Cependant, les utiliser pour des collections triées automatiquement, où l'ordre exact n'est pas critique, peut toujours être bénéfique.

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