binomial_real.sf 416 B

123456789101112
  1. #!/usr/bin/ruby
  2. # Compute binomial(n,k) as a floating-point value, for arbitrary large n and k.
  3. func binomial_real(n,k) {
  4. local Num!PREC = max(2*int(log2(n+2)), 192)
  5. exp(lgamma(n+1) - (lgamma(k+1) + lgamma(n - k + 1)))
  6. }
  7. say binomial(100!, 100).f #=> 1.07241237505844504438047039025154993084902991441e15639
  8. say binomial_real(100!, 100) #=> 1.07241237505844504438047039025154993084902991441e15639