Witam, tworzę program, który analizuje spore zbiory liczb zmiennoprzecinkowych (wczytywane z pliku). W tym celu program musi potrafić porównywać ( >, <= itd. ) oraz przyrównać ( == ) do siebie liczby double. Czy mam gwarancję, że w c++ poniższe funkcje dadzą wynik w 100% przypadków zgodny z matematycznym wynikiem poszczególnych działań ?
const double Eps = 0.00001;
bool doubleEquals(double left, double right, double epsilon) {
return (fabs(left - right) < epsilon);
}
bool doubleLess(double left, double right, double epsilon, bool orequal = false) {
if (fabs(left - right) < epsilon) {
return (orequal);
}
return (left < right);
}
bool doubleGreater(double left, double right, double epsilon, bool orequal = false) {
if (fabs(left - right) < epsilon) {
return (orequal);
}
return (left > right);
}
Przykład użycia:
double t1 = 1.5122;
double t2 = 1.5123;
if (doubleGreater(t1, t2, Eps, 1)) cout << t1 << " " << t2 << " t1 >= t2" << endl;
Liczby, które mój program przetwarza nigdy nie mają więcej niż 5 cyfr po przecinku, np.: 1.12345, 1.4, 10.723, 101.034, 1.54324 itp.