Привет, все, что мне было интересно, есть ли в .Net класс, который используется для вычисления точных чисел без ошибок округления?
Например, это не то, что я хочу:
decimal dividend = Decimal.One;
decimal divisor = 3;
dividend/divisor * divisor // gives us 0.9999999999999999999999999999 instead of 1
Я думал, есть ли класс чисел, который буферизует операцию до тех пор, пока нам не понадобится ее отобразить, другими словами, это будет выглядеть так:
Num n = new Num(1);
n.DivideBy(3);
n.MultiplyBy(3);
n.toString(); // gives us "1"
Num n2 = new Num(n);
n2.DivideBy(3);
int decimal_places = 8;
n2.RoundHalfUp(decimal_places);
n2.toString(); // gives us "0.33333333"
Конечно, это всего лишь пример реализации. По сути, главное здесь - я ищу класс, в котором нет ошибок округления (обычно с задержкой вычислений до последнего момента).
Я понимаю, что производительность будет ниже, чем Double
или Decimal
. Но он не должен делать вычисления вслепую, если он находится в пределах приемлемого времени.