Y at-il dans la STL ou Boost un ensemble de fonctions de comparaison simples génériques?comparaison à virgule flottante en STL, BOOST
Celui que je trouve exigent toujours des paramètres du modèle, et/ou instanciation d'un modèle de struct .
Je cherche quelque chose avec une syntaxe comme:
if (is_equal(x,y))
{
...
}
pourrait être mis en œuvre qui comme:
template <typename T>
bool is_equal(const T& x, const T& y)
{
return (fabs(x - y) < Precision<T>::eps);
}
EDIT: J'ai changé l'opérateur à l'égalité. (Voir les commentaires ci-dessous)
Pourquoi voudriez-vous utiliser un epsilon pour comparer plus ou moins? – AshleysBrain
La seule fois où une comparaison epsilon est nécessaire pour les types à virgule flottante ou double est pour la comparaison d'égalité '=='. plus ou moins n'a pas vraiment de sens avec epsilon, car qu'attendez-vous de la réponse quand ils sont égaux? si plus ou moins sont tous deux définis de la manière que vous mentionnez, puis dans le cas où ils sont égaux, vous obtiendrez un b = true et a == b = true, ce qui est incorrect. Le comportement correct est que ssi == b alors a> b = faux, et a Akanksh
@Akanksh, La mise en œuvre ci-dessus peut ne pas être juste, mais les inégalités basées sur epsilon sont significatives et importantes pour précisément le scénario que vous mettez en évidence. Si deux nombres sont égaux selon un test '==' basé sur epsilon, alors vous avez aussi besoin d'un test '<' qui retourne false, même si le premier nombre est toujours un peu plus petit que le second. –