1: string factorial(int n)

` 2: {`

3: var ex = 0.0;

4: var x = (double)n;

` 5: x = x + x + 1;`

` 6: `

7: if (x > 1)

` 8: {`

` 9: x = (Math.log(2.0 * Math.Pi) + Math.log(x / 2.0) * x - x`

` 10: - (1.0 - 7.0 / (30.0 * x * x)) / (6.0 * x)) / 2.0;`

` 11: x = x / Math.log(10);`

` 12: ex = Math.floor(x);`

` 13: x = Math.pow(10, x - ex);`

` 14: }`

` 15: `

16: var res = x.toString();

17: return res.substring(0, 6) + " E " + ex.toString();

` 18: }`

` 19: `

20: void calc()

` 21: {`

` 22: Console.writeLine(factorial(134217728));`

` 23: }`

Clearly, this method has it's limitations, but it is amazingly powerful.
The charm of the formula lies in the *small integer coefficients*: 2,1,7,30,6,2.
Therefore it is also well suited for the use with a pocket calculator. (The
order of the formula is O(n^{-5}).) Some obsolete browsers may use a float instead
of a double and run into
floating point trouble.

Our small calculator computes 134217728! ~ 8.3459 E 1032606161 using this formula. A better approximation is
8.34597925944327661772882039785919428429176258950852382 E 1032606161.

This approximation can for example be calculated as described in this section

'
A higher precision approximation'.

Back to the calculator.

Go to the RetroFactorial page to see how your parents calculated the factorial.

Back to the Homepage of Factorial Algorithms.