private static DecimalX expTaylor(DecimalX x, int scale) { DecimalX sumPrev; var factorial = DecimalX.Create(1); var xPower = x; // 1 + x var sum = x.Add(DecimalX.Create(1)); // Loop until the sums converge // (two successive sums are equal after rounding). var i = 2; do { // x^i xPower = xPower.Multiply(x); xPower = DecimalX.Rescale(xPower, -scale, RoundingMode.HalfEven); // i! factorial = factorial.Multiply(DecimalX.Create(i)); // x^i/i! var term = xPower.CDivide(factorial, scale, RoundingMode.HalfEven); // sum = sum + x^i/i! sumPrev = sum; sum = sum.Add(term); i++; } while (sum.CompareTo(sumPrev) != 0); return(sum); }