При сравнении двойных чисел на равенство нам нужно указать уровень допуска, потому что вычисления с плавающей запятой могут привести к ошибкам. Например:
double x;
double y;
x = f();
y = g();
if (fabs(x-y)<epsilon) {
// they are equal!
} else {
// they are not!
}
Однако, если я просто присвойте постоянное значение без каких-либо вычислений, мне все еще нужно проверить эпсилон?
double x = 1;
double y = 1;
if (x==y) {
// they are equal!
} else {
// no they are not!
}
Достаточно ли хорошее сравнение ==
? Или мне нужно сделать fabs(xy)< epsilon
снова? Можно ли внести ошибку в присваивание? Я слишком параноик?
Как насчет приведения ( double x = static_cast
)? -point ошибка?
Я использую C++ в Linux, но если он отличается по языку, я хотел бы понять и это.