Function: math-bernoulli-number
math-bernoulli-number is an autoloaded and byte-compiled function
defined in calc-funcs.el.gz.
Signature
(math-bernoulli-number N)
Source Code
;; Defined in /usr/src/emacs/lisp/calc/calc-funcs.el.gz
(defun math-bernoulli-number (n)
(if (= (% n 2) 1)
(if (= n 1)
'(frac -1 2)
0)
(setq n (/ n 2))
(while (>= n math-bernoulli-cache-size)
(let* ((sum 0)
(nk 1) ; nk = n-k+1
(fact 1) ; fact = (n-k+1)!
ofact
(p math-bernoulli-b-cache)
(calc-prefer-frac t))
(math-working "bernoulli B" (* 2 math-bernoulli-cache-size))
(while p
(setq nk (+ nk 2)
ofact fact
fact (math-mul fact (* nk (1- nk)))
sum (math-add sum (math-div (car p) fact))
p (cdr p)))
(setq ofact (math-mul ofact (1- nk))
sum (math-sub (math-div '(frac 1 2) ofact) sum)
math-bernoulli-b-cache (cons sum math-bernoulli-b-cache)
math-bernoulli-B-cache (cons (math-mul sum ofact)
math-bernoulli-B-cache)
math-bernoulli-cache-size (1+ math-bernoulli-cache-size))))
(nth (- math-bernoulli-cache-size n 1) math-bernoulli-B-cache)))