Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
math_decimal [2009/05/14 09:15] tyrtamos |
math_decimal [2010/03/15 06:55] tyrtamos |
||
---|---|---|---|
Ligne 36: | Ligne 36: | ||
\\ | \\ | ||
- | Dernier point général, les codes qui suivent supposent: | + | Dernier point général, |
* l' | * l' | ||
Ligne 42: | Ligne 42: | ||
* que les calculs se feront avec la précision donnée par " | * que les calculs se feront avec la précision donnée par " | ||
- | * que les divisions avec '/' | + | * que les divisions avec '/' |
===== Calcul de sinus(x) ===== | ===== Calcul de sinus(x) ===== | ||
Ligne 241: | Ligne 241: | ||
* termes suivants: < | * termes suivants: < | ||
- | Voilà le code. Au départ, la 1ère fonction " | + | Voilà le code. Au départ, la 1ère fonction " |
Notez qu'on utilise la fonction racine sqrtdec(x) définie par ailleurs sur cette page. | Notez qu'on utilise la fonction racine sqrtdec(x) définie par ailleurs sur cette page. | ||
Ligne 522: | Ligne 522: | ||
===== Calcul de la racine n_ième ===== | ===== Calcul de la racine n_ième ===== | ||
- | Puisqu' | + | Puisqu' |
<code python> | <code python> | ||
Ligne 552: | Ligne 552: | ||
if type(x)!=type(Decimal): | if type(x)!=type(Decimal): | ||
x = Decimal(str(x)) | x = Decimal(str(x)) | ||
+ | if type(y)!=type(Decimal): | ||
+ | y = Decimal(str(y)) | ||
return x**y | return x**y | ||
</ | </ | ||
Ligne 581: | Ligne 583: | ||
Simple, non? | Simple, non? | ||
+ | |||
+ | On peut, bien entendu faire une fonction spéciale et autonome intégrant l' | ||
+ | |||
+ | <code python> | ||
+ | def pidec(): | ||
+ | """ | ||
+ | getcontext().prec += 2 | ||
+ | x = Decimal(" | ||
+ | xc = x*x | ||
+ | k = x | ||
+ | s1 = k | ||
+ | n = 0 | ||
+ | while True: | ||
+ | n += 1 | ||
+ | k *= xc*(2*n-1)*(2*n-1)/ | ||
+ | s2 = s1 + k | ||
+ | if s2 == s1: | ||
+ | break | ||
+ | s1 = s2 | ||
+ | getcontext().prec -= 2 | ||
+ | return 6*s2 | ||
+ | </ | ||
Exemple: | Exemple: | ||
Ligne 597: | Ligne 621: | ||
<code python> | <code python> | ||
- | pi = Decimal(" | + | pi = Decimal(" |
- | 3.141592653589793238462643383279502884197169399375\ | + | 14159265358979323846264338327950288419716939937510\ |
- | 10582097494459230781640628620899862803482534211706\ | + | 58209749445923078164062862089986280348253421170679\ |
- | 79821480865132823066470938446095505822317253594081\ | + | 82148086513282306647093844609550582231725359408128\ |
- | 28481117450284102701938521105559644622948954930381\ | + | 48111745028410270193852110555964462294895493038196\ |
- | 96442881097566593344612847564823378678316527120190\ | + | 44288109756659334461284756482337867831652712019091\ |
- | 91456485669234603486104543266482133936072602491412\ | + | 45648566923460348610454326648213393607260249141273\ |
- | 73724587006606315588174881520920962829254091715364\ | + | 72458700660631558817488152092096282925409171536436\ |
- | 36789259036001133053054882046652138414695194151160\ | + | 78925903600113305305488204665213841469519415116094\ |
- | 94330572703657595919530921861173819326117931051185\ | + | 33057270365759591953092186117381932611793105118548\ |
- | 48074462379962749567351885752724891227938183011949\ | + | 07446237996274956735188575272489122793818301194912\ |
- | 12983367336244065664308602139494639522473719070217\ | + | 98336733624406566430860213949463952247371907021798\ |
- | 98609437027705392171762931767523846748184676694051\ | + | 60943702770539217176293176752384674818467669405132\ |
- | 32000568127145263560827785771342757789609173637178\ | + | 00056812714526356082778577134275778960917363717872\ |
- | 72146844090122495343014654958537105079227968925892\ | + | 14684409012249534301465495853710507922796892589235\ |
- | 35420199561121290219608640344181598136297747713099\ | + | 42019956112129021960864034418159813629774771309960\ |
- | 60518707211349999998372978049951059731732816096318\ | + | 51870721134999999837297804995105973173281609631859\ |
- | 59502445945534690830264252230825334468503526193118\ | + | 50244594553469083026425223082533446850352619311881\ |
- | 81710100031378387528865875332083814206171776691473\ | + | 71010003137838752886587533208381420617177669147303\ |
- | 03598253490428755468731159562863882353787593751957\ | + | 59825349042875546873115956286388235378759375195778\ |
- | 78185778053217122680661300192787661119590921642019\ | + | 18577805321712268066130019278766111959092164201989") |
- | 89") | + | |
</ | </ | ||
+ | |||
+ | Si on veut calculer Pi plus rapidement et/ou avec plus de chiffres, on peut utiliser l'un des nombreux algorithmes que les fanas de Pi ont élaboré depuis toujours. | ||
+ | |||
+ | Par exemple, avec l' | ||
+ | |||
+ | <code python> | ||
+ | def pidec(): | ||
+ | """ | ||
+ | getcontext().prec += 2 | ||
+ | a1 = Decimal(" | ||
+ | b1 = Decimal(" | ||
+ | p1 = Decimal(" | ||
+ | t1 = Decimal(" | ||
+ | eps = Decimal(" | ||
+ | while True: | ||
+ | a2 = (a1 + b1)/2 | ||
+ | b2 = (a1*b1).sqrt() | ||
+ | p2 = 2*p1 | ||
+ | a12 = a1-a2 | ||
+ | t2 = t1-p1*a12*a12 | ||
+ | if abs(a2-b2)< | ||
+ | break | ||
+ | else: | ||
+ | a1, b1, p1, t1 = a2, b2, p2, t2 | ||
+ | ab = a2+b2 | ||
+ | res = (ab*ab)/ | ||
+ | getcontext().prec -= 2 | ||
+ | return res*1 # le *1 est pour revenir à la précision courante avec arrondi | ||
+ | </ | ||
+ | |||
+ | Avec cet algorithme, on peut calculer: | ||
+ | |||
+ | * Pi avec 1000 décimales en 0.14 secondes (au lieu de 7 secondes avec l'arc sinus) | ||
+ | |||
+ | * Pi avec 5000 décimales en 4 secondes | ||
+ | |||
+ | * Pi avec 50000 (cinquante mille) décimales en 10 minutes environ | ||
+ | |||
+ | On retrouve, bien entendu les mêmes résultats que ici: http:// | ||
===== Calcul de e ===== | ===== Calcul de e ===== |