NaNs e Infinites pueden arruinar tales comparaciones, como otros ya han mencionado.
Sin embargo, hay otra trampa: en C++ no puede confiar en una expresión de tiempo de compilación de tipo flotante, comparando igual a la misma expresión evaluada en tiempo de ejecución.
El motivo es que C++ permite una mayor precisión para los cálculos de fp, de cualquier manera. Ejemplo:
#include <iostream>
// This provides sufficent obfuscation so that g++ doesn't just inline results.
bool obfuscatedTrue() { return true; }
int main()
{
using namespace std;
double const a = (obfuscatedTrue()? 3.0 : 0.3);
double const b = (obfuscatedTrue()? 7.0 : 0.7);
double const c = a/b;
cout << (c == a/b? "OK." : "\"Wrong\" comparision result.") << endl;
}
Los resultados con un compilador en particular:
C:\test> g++ --version | find "++"
g++ (TDM-2 mingw32) 4.4.1
C:\test> g++ fp_comparision_problem.cpp & a
"Wrong" comparision result.
C:\test> g++ -O fp_comparision_problem.cpp & a
OK.
C:\test> _
Saludos & HTH,
- Alf
tratar de depurarlo.. – rkellerm
@ rursw1 Más interesado si hay una garantía del estándar – CsTamas
@ rursw1: Eso no va a funcionar. –