Esiste in STL o Boost un set di funzioni di confronto semplici generiche?Confronto a virgola mobile in AWL, BOOST
Quello che ho trovato richiede sempre i parametri del modello e/o l'istanziazione di un modello di struttura .
Sto cercando qualcosa con una sintassi simile:
if (is_equal(x,y))
{
...
}
che potrebbero essere attuate come:
template <typename T>
bool is_equal(const T& x, const T& y)
{
return (fabs(x - y) < Precision<T>::eps);
}
EDIT: Ho cambiato l'operatore alla parità. (Vedi commenti qui sotto)
Perché dovresti usare un epsilon per confrontare più o meno? – AshleysBrain
L'unico momento in cui un confronto epsilon è necessario per virgola mobile o doppio è per il confronto dell'uguaglianza '=='. più o meno non hanno alcun significato con epsilon, perché cosa ti aspetti che la risposta sia quando sono uguali? se più o meno sono entrambi definiti nel modo in cui ne parli, allora nel caso in cui siano uguali, otterrai b = true e a == b = true, che non è corretto. Il comportamento corretto è che iff a == b then a> b = false e a Akanksh
@Akanksh, L'implementazione sopra potrebbe non essere corretta, ma le disuguaglianze basate su epsilon sono significative e importanti per lo scenario che evidenziate. Se due numeri sono uguali secondo un test '==' basato su epsilon, allora hai bisogno anche di un test <