RosettaCodeData/Task/Gamma-function/Racket/gamma-function.rkt

30 lines
923 B
Racket

#lang racket
(define (gamma number)
(if (> 1/2 number)
(/ pi (* (sin (* pi number))
(gamma (- 1.0 number))))
(let ((n (sub1 number))
(c '(0.99999999999980993 676.5203681218851 -1259.1392167224028
771.32342877765313 -176.61502916214059 12.507343278686905
-0.13857109526572012 9.9843695780195716e-6 1.5056327351493116e-7)))
(* (sqrt (* pi 2))
(expt (+ n 7 0.5) (+ n 0.5))
(exp (- (+ n 7 0.5)))
(+ (car c)
(apply +
(for/list ((i (in-range (length (cdr c)))) (x (in-list (cdr c))))
(/ x (+ 1 n i)))))))))
(map gamma '(0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0))
;->
;'(9.513507698668736
; 4.590843711998802
; 2.9915689876875904
; 2.218159543757687
; 1.7724538509055159
; 1.489192248812818
; 1.2980553326475577
; 1.1642297137253037
; 1.068628702119319
; 1.0)