Вы могли бы использовать подход эпсилон, но эпсилон, как правило, выдумка, чтобы обойти тот факт, что арифметика с плавающей точкой с потерями.
Вы могли бы рассмотреть возможность вообще избегать двоичных чисел с плавающей точкой и использовать хороший Rationalучебный класс.
Вышеприведенному вычислению, вероятно, суждено быть 256, если вы выполняете арифметику без потерь, как если бы вы использовали тип Rational.
Типы Rational могут идти по имени класса Ratio или Fraction, идовольно просто написать
Вот один пример .Вот еще один
Редактировать ....
Чтобы понять вашу проблему, учтите, что когда десятичное значение 0,01 преобразуется в двоичное представление, оно не может быть сохранено точнов конечной памяти.Шестнадцатеричное представление для этого значения равно 0,028F5C28F5C, где «28F5C» повторяется бесконечно.Поэтому даже перед выполнением каких-либо вычислений вы теряете точность, просто сохраняя 0,01 в двоичном формате.
Для решения этой проблемы используются классы Rational и Decimal, хотя и с затратами на производительность.Рациональные типы избегают этой проблемы, сохраняя числитель и знаменатель для представления вашей ценности.Десятичный тип использует двоичный кодированный десятичный код , формат , который может быть с потерями при делении, но может точно хранить общие десятичные значения.
Для ваших целей я по-прежнему предлагаю тип Rational.