Il official documentation per qFuzzyCompare()
non ha realmente spiegare perché si potrebbe usare questo, ma in generale si confrontano i valori in virgola mobile è considerato una cattiva pratica perché due variabili floating point apparentemente identici possono essere trovati differire a causa di errori di arrotondamento. Puoi leggere ulteriori informazioni su questo e altri trucchi delle variabili in virgola mobile here.
Se si guarda a codice sorgente per qFuzzyCompare()
per la doppia e galleggiare, rispettivamente, come spedito con Qt5.6.0
(Tenere premuto CTRL e fare clic sulla funzione per vedere questo in QtCreator
), si può dedurre che si cerca di ridurre la probabilità di inesattezze per ottenere nel senso di un test di uguaglianza:
Q_DECL_CONSTEXPR static inline bool qFuzzyCompare(double p1, double p2) Q_REQUIRED_RESULT Q_DECL_UNUSED;
Q_DECL_CONSTEXPR static inline bool qFuzzyCompare(double p1, double p2)
{
return (qAbs(p1 - p2) * 1000000000000. <= qMin(qAbs(p1), qAbs(p2)));
}
Q_DECL_CONSTEXPR static inline bool qFuzzyCompare(float p1, float p2) Q_REQUIRED_RESULT Q_DECL_UNUSED;
Q_DECL_CONSTEXPR static inline bool qFuzzyCompare(float p1, float p2)
{
return (qAbs(p1 - p2) * 100000.f <= qMin(qAbs(p1), qAbs(p2)));
}
fonte
2016-05-08 22:57:08
non è * una cattiva pratica * è completamente sbagliato confrontare floating point variabili con un solo '' == – ixSci
Questa funzione permette di ipotesi circa il valore di epsilon. Quali sono gli avvertimenti sull'utilizzo di Qt epsilon e non la definizione a mano? Gli avvertimenti di –
non lo so, ma usarlo significa che userete lo stesso epsilon usato dal resto di Qt che potrebbe salvarvi da sottili errori derivanti dall'uso di epsilon diversi in calcoli intrecciati. –