Сравнение присваивания констант с плавающей запятой

При сравнении двойных чисел на равенство нам нужно указать уровень допуска, потому что вычисления с плавающей запятой могут привести к ошибкам. Например:

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(100))? -point ошибка?

Я использую C++ в Linux, но если он отличается по языку, я хотел бы понять и это.

5
задан Vendetta 23 March 2012 в 04:53
поделиться