Здравствуйте!
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)))