dernière m.a.j le 8 septembre 2003
Page d'accueil
CALCUL DE PI :
Voici la méthode que j’ai trouvé et qui s'avère
être celle utilisée par Archimède . Vous trouverez d'autres
adaptations et plein d'autres renseignement sur PI sur le site http://www.nombrepi.com/ .
En partant du principe que PI possède une infinité de chiffres après la virgule,
on ne peut alors que l’évaluer . Dès lors pourquoi ne pas
considérer un cercle comme un polygone régulier avec une
infinité de cotés . On peut facilement calculer un carré
à l’intérieur d’un cercle (le carré étant déjà
un polygone à 4 cotés ) .
Optons que le rayon
du cercle est R,
le coté du carré est C |
|
Le coté C se calcule comme suit : |
on peut donc déduire cette formule :
mais on est encore loin de PI . |
Voyons la suite ...
Maintenant qu'on à C le coté d'un polygone à 4
cotés (un carré donc) il est facile de construire géométriquement
un octogone dans le cercle . Il suffit de faire passer un rayon par le
centre M du coté et de reporter la longueur C' (voir
figure b) . Pour connaitre la valeur de C' c'est très simple
:
Comme nous le voyons sur le graphique C' se trouve être l'hypothénuse
d'un triangle dont les 2 cotés opposés se calculent comme
suit :
On en déduit finalement :
On s'approchera un peu plus de PI :
Figure b:
Il suffit maintenant de donner la valeur de C' à C et de recalculer
K et L pour déduire un nouveau C' que l'on multipliera par 16 et
de recommencer en multipliant par 32 puis 64,128 etc... en s'approchant
un peu plus de PI à chaque fois .
Voici maintenant ce calcul programmé en GFA BASIC :
OPENW #1,0,0,640,480,-1
rayon = 1
cote = SQR(2 * (rayon ^ 2))
nc% = 4
EvalPi = (cote * nc%) / (2 * rayon)
DO
' ici le calcul proprement dit
K = cote / 2
L = rayon - SQR(rayon ^ 2 - (cote / 2) ^ 2)
cote = SQR(K ^ 2 + L ^ 2)
nc% = nc% * 2
EvalPi = (cote * nc%) / (2 * rayon)
CLS
RGBCOLOR RGB(0,0,0)
? AT(0,0)
? "Nombre de cotês : ";nc%
' ici l'affichage du rêsultat
PRINT "PI ~= ";EvalPi
' Et lá l'afficage d'un polygone á N cotês
RGBCOLOR RGB(0,0,0)
CIRCLE 200,200,100
FOR i% = 1 TO 2
x1 = 200 + SIN(i% * 2 * PI / nc%) * 100
x2 = 200 + SIN(SUCC(i%) * 2 * PI / nc%) * 100
y1 = 200 + COS(i% * 2 * PI / nc%) * 100
y2 = 200 + COS(SUCC(i%) * 2 * PI / nc%) * 100
RGBCOLOR RGB(255,0,0)
LINE x1,y1,x2,y2
RGBCOLOR RGB(0,255,0)
LINE 200,200,x1,y1
NEXT i%
PAUSE 30
PEEKEVENT
EXIT IF MENU(1) = 4
LOOP
CLOSEW #1
Une autre méthode bien connue :
L'adaptation en GFA-Basic donne :
DO
r1 = 4 / ((8 * n%) + 1 )
r2 = 2 / ((8 * n%) + 4 )
r3 = 1 / ((8 * n%) + 5 )
r4 = 1 / ((8 * n%) + 6 )
r5 = (1 / 16) ^ n%
m = (r1 - r2 - r3 - r4) * r5
r = r + m
? r
INC n%
PAUSE 10
LOOP
Une méthode très interessante
L'algorithme utilisé repose sur une série d'Euler :
J'ai trouvé cette formule sur ce site : http://membres.lycos.fr/freyssin/div/pi.html.
L'auteur du site recommande un livre "passionnant et très bien illustré" :"Le fascinant nombre Pi" par Jean-Paul Delahaye, aux éditions Pour La Science - Belin (ISBN : 2-9029-1825-9) pages 94 à 98.
L'adapatation en GFA-Basic :
P = 1,B = 1,C = 1
FOR A% = 1 TO 50
B = B * A%
C = C * SUCC(MUL(A%,2))
P = P + (B / C)
NEXT A%
? "PI ~= "; P * 2
KEYGET RIEN%
Avec la calculette...
Je ne sais plus comment j'ai trouvé ce calcul, c'était
pendant un cours de math il y a une dizaine d'année, je tripotait
ma calculatrice quand j'eu soudain un résultat surprenant .
Je met ma calculatrice en Degrés, je tape 0.0018 puis sin et
j'obtiens 3,141592653073e-5 que je multiplie par 100000 et ca donne
presque PI . En fait plus on met de zéros derrière la virgule
plus on sera précis .
Voici donc la formule en question :
Si j'ai pris 18 comme nombre ce n'est pas par hazard . Il s'agit de
180 en fait . C'est à dire 360° / 2 . Ce qui correspond à
PI en radian . Comme quoi les degrés sont convertis en radian avant
le calcul .
Petit rectificatif : Il faut diviser 180 et non 18 ! (Merci à
Daniel Mihalcea)
http://www.miha.net - site personnel
http://mathrix.virtualave.net
- annuaire de recherche mathematique
voir aussi une page hyper-complète sur le calcul de PI : http://perso-info.enst-bretagne.fr/~brouty/Maths/pi.html