Changeset bc851c79e6fffe06c4383142bc2dfeb154fbde14 for qd-gamma.lisp
- Timestamp:
- 03/23/12 08:38:53 (14 months ago)
- Children:
- efbf11a6f5cd7e15f51cdb52fefd1584ab58c3d9
- Parents:
- 6162b30bff1a78bcf7757476e8b05346af85f0e2, fe8cffb5ee8e7161addf7586ecaee00682c6bf1b
- git-committer:
- Raymond Toy <rtoy@…> (03/23/12 08:38:53)
- Files:
-
- 1 modified
-
qd-gamma.lisp (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
qd-gamma.lisp
r4b332e rfe8cff 498 498 (= v (ftruncate v))) 499 499 ;; v is an integer 500 (let ((n (truncate v))) 501 (- (* (/ (expt -z (- v 1)) 500 (let* ((n (truncate v)) 501 (n-1 (1- n))) 502 (- (* (/ (expt -z n-1) 502 503 (gamma v)) 503 504 (- (psi v) (log z))) 504 (loop for k from 0 below n505 (loop for k from 0 505 506 for term = 1 then (* term (/ -z k)) 506 for sum = (/ (- 1 v)) then (+ sum (/ term (+ k 1 -v))) 507 when (< (abs term) (* (abs sum) eps)) 508 return sum) 509 (loop for k from n 510 for term = 1 then (* term (/ -z k)) 511 for sum = 0 then (+ sum (/ term (+ k 1 -v))) 507 for sum = (/ (- 1 v)) then (+ sum (let ((denom (- k n-1))) 508 (if (zerop denom) 509 0 510 (/ term denom)))) 512 511 when (< (abs term) (* (abs sum) eps)) 513 512 return sum))) … … 528 527 ;; 529 528 ;; 530 (cond ((< (abs z) 1) 529 (cond ((and (realp v) (minusp v)) 530 ;; E(-v, z) = z^(-v-1)*incomplete_gamma_tail(v+1,z) 531 (let ((-v (- v))) 532 (* (expt z (- v 1)) 533 (incomplete-gamma-tail (+ -v 1) z)))) 534 ((< (abs z) 1) 531 535 ;; Use series for small z 532 536 (s-exp-integral-e v z))
