Но, если вы все равно используете допуски, почему вы заботитесь о том, чтобы a-b == .5 (на самом деле) не оценивалось? Если вы все равно используете допуски, вы говорите, что меня не волнуют конечные точки.
Вот что правда
если ((a-b)> = .5)
если ((a-b) <.5) </p>
один из них всегда должен оцениваться как true на каждой паре двойников. Любой код, который использует один неявно, определяет, по крайней мере, операцию no для другого. Если вы используете допуски для фактического .5, включенного в первый, но ваша проблема определена в непрерывном домене, вы не добились многого. В большинстве задач, связанных с непрерывными значениями в основной задаче, будет очень мало смысла в этом, поскольку значения, произвольно превышающие .5, всегда будут оцениваться так, как должны. Значения, произвольно близкие к .5, перейдут к «неправильному» управлению потоком, но в постоянных задачах, когда вы используете соответствующую точность, которая не имеет значения.
Допуски имеют смысл только тогда, когда вы имеете дело с проблемами типа
если ((a-b) == c)
if ((a-b)! = c)
Здесь никакая «подходящая точность» не может вам помочь. Причина в том, что вы должны быть готовы к тому, что второе значение всегда будет иметь значение true, если вы вручную не установите биты a-b на очень низком уровне, хотя на самом деле вы, вероятно, хотите, чтобы первое значение иногда было истинным.