Re[5]: Как правильно сравнивать числа типа double?
От: mika747  
Дата: 02.12.10 07:58
Оценка:
Здравствуйте!

A>
A>if (fabs(a-b) <= DBL_EPSILON * fmax(fabs(a),fabs(b)))
A>{
A>  . . .Числа равны с относительной точностью DBL_EPSILON
A>}
A>


A>ИМХО тут всё чётко.



А если и a и b по модулю меньше 1, например 0.01 и 0.001?
Тогда выражение
   DBL_EPSILON * fmax(fabs(a),fabs(b))

должно получится меньше, чем DBL_EPSILON,
но в double это не представимо, а занчит
   if (fabs(a-b) <= DBL_EPSILON * fmax(fabs(a),fabs(b)))

сравнивает fabs(a-b) с чем-то неопределенным, наверное нулем...

Учитывая вышеизложенное, думаю правильнее будет
   if (fabs(a-b) <= DBL_EPSILON * fmax(1.0,fabs(a),fabs(b)))
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.