stirling_factorial_correction_terms.sf 656 B

123456789101112131415161718192021222324252627
  1. #!/usr/bin/ruby
  2. # Correction terms for Stirling's asymptotic formula for n!
  3. # See also:
  4. # https://arxiv.org/pdf/1002.3894.pdf
  5. # https://en.wikipedia.org/wiki/Stirling%27s_approximation
  6. func factorial_correction_terms(n, r = n) {
  7. 1..r -> sum {|k|
  8. bernoulli(2*k) / (2*k * (2*k - 1) * n**(2*k - 1))
  9. }
  10. }
  11. func log_factorial_approx(n){
  12. n*(log(n) - 1) + log(Num.tau * n)/2 + factorial_correction_terms(n)
  13. }
  14. say "=> Approximation of log(100!):"
  15. say lngamma(100 + 1)
  16. say log_factorial_approx(100)
  17. __END__
  18. => Approximation of log(100!):
  19. 363.739375555563490144079993369655638027823921063
  20. 363.739375555563490144079993369655638027823921063