Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision Les deux révisions suivantes | |||
math_decimal_bernoulli [2010/03/16 11:39] tyrtamos créée |
math_decimal_bernoulli [2010/03/16 13:01] tyrtamos |
||
---|---|---|---|
Ligne 15: | Ligne 15: | ||
* avec < | * avec < | ||
- | * et < | + | * et < |
+ | |||
+ | Dans cette formule: | ||
+ | |||
+ | * <m>{C_{n+1}}^k</ | ||
+ | |||
+ | * < | ||
+ | |||
+ | Mais en quoi cette équation est-elle " | ||
+ | |||
+ | Pour le savoir, développons pour n=3: | ||
+ | |||
+ | * < | ||
+ | |||
+ | Il faudrait donc que l'on puisse calculer < | ||
+ | |||
+ | Mais là, on voit bien le problème: on connait < | ||
+ | |||
+ | Comment? En appliquant la formule pour n=1 et n=2 et, à chaque fois, en calculant le dernier B. | ||
+ | |||
+ | Voilà le code qui fait cela (Python version 2.6): | ||
+ | |||
+ | <code python> | ||
+ | # | ||
+ | # -*- coding: utf-8 -*- | ||
+ | from __future__ import division | ||
+ | |||
+ | from decimal import * | ||
+ | |||
+ | ############################################################################## | ||
+ | def combin(n, k): | ||
+ | """ | ||
+ | if k > n//2: | ||
+ | k = n-k | ||
+ | x = 1 | ||
+ | y = 1 | ||
+ | i = n-k+1 | ||
+ | while i <= n: | ||
+ | x = (x*i)//y | ||
+ | y += 1 | ||
+ | i += 1 | ||
+ | return x | ||
+ | |||
+ | ############################################################################## | ||
+ | def bernoulli(n): | ||
+ | """ | ||
+ | prec = getcontext().prec | ||
+ | getcontext().prec = 50 | ||
+ | B = [Decimal(" | ||
+ | for m in xrange(1, | ||
+ | if m>1 and m%2!=0: | ||
+ | B.append(Decimal(" | ||
+ | else: | ||
+ | c = Decimal(" | ||
+ | for k in xrange(0, | ||
+ | c += Decimal(str(combin(m+1, | ||
+ | B.append(-c/ | ||
+ | getcontext().prec = prec | ||
+ | return float(B[n]) | ||
+ | </ | ||