Здравствуйте, hexamino, Вы писали:
H>А может быть, float2 — float1 > -delta ?
Нет. Вот как это должно работать:
1. Вычисляем delta = float2 — float1.
2. Если бы у нас была точная арифметика, то по
знаку delta мы бы судили о том, кто больше. А равенство достигалось бы при delta == 0.
3. Но у нас конечная точность, и мы моделируем это при помощи расширения "зоны нуля" в
обе стороны на epsilon. То есть теперь при |delta| < epsilon мы считаем. что float1 == float2.
4. Ну так очевидными следствиями из этого являются:
4.1. float2 < float1 считается тогда, когда delta <= -epsilon
4.2. float2 > float2 cчитается тогда, когда delta >= +epsilon
Нарисуйте картинку и всё станет очевидно.
Еще, как упомянул ТК, можно ввести
относительную точность, вместо абсолютной. Это когда epsilon выражается через |float2+float1|. В принципе, можно обойтись и одним из сравниваемых — любым, поскольку если они
сильно отличаются, то и епсилон нам не важен.
... << RSDN@Home 1.2.0 alpha rev. 677>>