Implemented `flmultinomial' (not accurately, but it's there); changed
argument types to match `multinomial'
This commit is contained in:
parent
10a348815b
commit
7aadf33ead
|
@ -13,6 +13,7 @@
|
|||
(provide flfactorial
|
||||
flbinomial
|
||||
flpermutations
|
||||
flmultinomial
|
||||
fllog-factorial
|
||||
fllog-permutations
|
||||
fllog-binomial
|
||||
|
@ -138,10 +139,14 @@
|
|||
;; ===================================================================================================
|
||||
;; Multinomial
|
||||
|
||||
(: fllog-multinomial (Flonum Flonum * -> Flonum))
|
||||
(define (fllog-multinomial n . ks)
|
||||
(: fllog-multinomial (Flonum (Listof Flonum) -> Flonum))
|
||||
(define (fllog-multinomial n ks)
|
||||
(cond [(n . < . 0) +nan.0]
|
||||
[(ormap negative? ks) +nan.0]
|
||||
[(not (= n (apply + ks))) -inf.0]
|
||||
[(ormap (λ: ([k : Flonum]) (= n k)) ks) 0.0]
|
||||
[else (apply - (fllog-factorial n) (map fllog-factorial ks))]))
|
||||
|
||||
(: flmultinomial (Flonum (Listof Flonum) -> Flonum))
|
||||
(define (flmultinomial n ks)
|
||||
(flexp (fllog-multinomial n ks)))
|
||||
|
|
|
@ -92,21 +92,21 @@ These functions are as robust and accurate as their corresponding inverses.
|
|||
@deftogether[(@defproc[(flfactorial [n Flonum]) Flonum]
|
||||
@defproc[(flbinomial [n Flonum] [k Flonum]) Flonum]
|
||||
@defproc[(flpermutations [n Flonum] [k Flonum]) Flonum]
|
||||
@defproc[(flmultinomial [n Flonum] [k Flonum] ...) Flonum])]{
|
||||
@defproc[(flmultinomial [n Flonum] [ks (Listof Flonum)]) Flonum])]{
|
||||
Like @racket[(fl (factorial (fl->exact-integer n)))] and so on, but computed in constant
|
||||
time. Also, these return @racket[+nan.0] instead of raising exceptions.
|
||||
|
||||
For @racket[factorial]-family functions that return sensible values for non-integers, see
|
||||
For factorial-like functions that return sensible values for non-integers, see
|
||||
@racket[gamma] and @racket[beta].
|
||||
}
|
||||
|
||||
@deftogether[(@defproc[(fllog-factorial [n Flonum]) Flonum]
|
||||
@defproc[(fllog-binomial [n Flonum] [k Flonum]) Flonum]
|
||||
@defproc[(fllog-permutations [n Flonum] [k Flonum]) Flonum]
|
||||
@defproc[(fllog-multinomial [n Flonum] [k Flonum] ...) Flonum])]{
|
||||
@defproc[(fllog-multinomial [n Flonum] [ks (Listof Flonum)]) Flonum])]{
|
||||
Like @racket[(fllog (flfactorial n))] and so on, but more accurate and without unnecessary overflow.
|
||||
|
||||
For log-@racket[factorial]-family functions that return sensible values for non-integers, see
|
||||
For log-factorial-like functions that return sensible values for non-integers, see
|
||||
@racket[log-gamma] and @racket[log-beta].
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user