Gobillot
Messages postés3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 2019
-
24 juin 2005 à 20:09
Gobillot
Messages postés3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 2019
-
27 juin 2005 à 22:31
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
Dim i As Long
Dim a As Long
Dim b As Long
Dim x As Double
Dim pi As Double
a 3: x 1
For i = 1 To 10000000
b = a + 2
x = x - 1 / a + 1 / b
a = b + 2
Next
MsgBox "ATN(1)= " & x
MsgBox "pi=" & x * 4
Scalpweb
Messages postés1467Date d'inscriptionsamedi 13 mars 2004StatutMembreDernière intervention 5 mai 20104 27 juin 2005 à 21:40
héhé pas bête lol
;-)
Vive les maths...
ScSami
Messages postés1488Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention 3 décembre 200724 27 juin 2005 à 15:39
Enfin, je veux dire, sans la fonction du VB ?
ScSami
Messages postés1488Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention 3 décembre 200724 27 juin 2005 à 15:36
Oui, et ATN(1), on l'obtient commment ?
mynyroger
Messages postés20Date d'inscriptionmardi 25 février 2003StatutMembreDernière intervention 1 février 2010 27 juin 2005 à 08:11
Vous vous compliquez la vie.
pi = 4 * Atn(1)
et vous avez pi=3.14159265358979
ScSami
Messages postés1488Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention 3 décembre 200724 26 juin 2005 à 23:08
Waou! Merci pour toutes ces impressionnantes précisions Gobillot!
Respect
Gobillot
Messages postés3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 201934 26 juin 2005 à 18:43
il existe des tas de méthodes pour calculer les décimales de Pi avec précision:
- méthode des polygones
- méthode en arc tangente
- méthode des suites
- PI = 16arctg(1/5) - 4arctg(1/239)
- Pi = sum (1/16^i * (4/(8*i+1) - 2/(8*i+4) - 1/(8*i+5) - 1/(8*i+6)), i=0..infinity)
- et plein d'autres que j'arrive pas à copier ici
il existe aussi aussi des méthodes basées sur le hasard:
- les aiguilles de Buffon:
Le naturaliste français Georges Louis Leclerc comte de Buffon (1707-1788) montra que la probabilité pour qu'une aiguille de longueur L lancée sur un parquet dont les lattes ont une largeur L coupe le bord d'une latte est 2/Pi. Plus généralement, pour une aiguille de longueur a tombant sur des lattes de longueur b la probabilité est (2.a)/(b.Pi) .
i/n (2*a) / (b*Pi)> Pi = (2*a*n) / (b*i) , où n est le nombre d'aiguilles lancées et i le nombre d'intersections.
La méthode de Buffon repose sur l'hyposthèse que l'espace physique est euclidien, et comme les autres méthodes basée sur le hasard n'a pas une très bonne efficacité : on a calculé que pour obtenir une précision de 1/1000 avec une probabilité de 95% il faudrait lancer environ 9000000 aiguilles. Et de plus on ne sait jamais avec quelle précision on connaît Pi.
- les fléchettes de Monté-Carlo:
Dans cette méthode, il s'agit de calculer stastistiquement la surface d'un disque.
Soit un disque de rayon 1, sa surface vaut Pi*r^2 Pi*1*1 Pi, le carré circonscrit à lui une surface S = (2*r)^2 = 2*2 = 4. En considérant que l'on lance des fléchettes de manière totalement aléatoire (sans chercher à viser le centre), le rapport entre le nombre de fléchettes à l'intérieur du disque et celui à l'intérieur du carré est égal au rapport des surfaces.
Sur la figure, il y en a 23 à l'intérieur du disque et 32 à l'intérieur du carré (on ne tient pas compte des fléchettes à l'extérieur du carré) d'où : Pi/4 23/32 donc Pi 4*23/32 = 2,875.
Comme on peut s'en rendre compte cette technique n'est pas très performante comme toutes les techniques sur le hazard, car elles supposent un tirage aléatoire parfait, que l'on ne peut obtenir dans la pratique et qu'il faut lancer un nombre concidérable de fléchettes pour avoir une précision médiocre, et dont on n'est pas sûr à cause du fait que les tirages sont aléatoires.
- et d'autres méthodes
j'espère que ça répond à votre curosité
comme il faut un tirage aléatoire parfait, et un grand nombre de tirages sans être jamais sûr de la précision obtenue.
j'en ai conclu que plutôt d'espèrer calculer pi avec précision avec ces méthodes basées sur les nombres aléatoires, ça peut au contraire servir à tester les fonctions linéaires congruentielles qui permettrent de donner des nombres pas vraiment aléatoires, mais pseudo aléatoires.
- le résultat obtenue par le Rnd de Vb est tout à fait honorable je pense, faut pas espérer avoir plus.
rectifications: pour faire le tour complet avec vb il suffit de boucler 8388608 fois, puisqu'on prend 2 nombres à chaque fois,
inutile de faire de faire plus, puisqu'on retombera toujours sur les mêmes nombres.
- maintenant si vous créer votre propre fonction de tirage de nombres aléatoires, faut lui faire passer des tests, tests plus ou moins compliqués et très longs.
test du poker, test graphique, et plein d'autres
pouquoi pas le test du calcul de pi par la méthode du calcul aléatoire ?
Scalpweb
Messages postés1467Date d'inscriptionsamedi 13 mars 2004StatutMembreDernière intervention 5 mai 20104 26 juin 2005 à 17:56
Mouai pareil pour moi.
En tout cas décidement, t'es un matheux JEROMEGEL ;-).
@+ tt le monde,
Scalpweb
ScSami
Messages postés1488Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention 3 décembre 200724 25 juin 2005 à 19:02
3.1415867805481 !!! Je comprends pas, c'est pas 3,1415926535897 théoriquement !?!?
:-/
jeromegel
Messages postés12Date d'inscriptionmardi 19 avril 2005StatutMembreDernière intervention25 juin 2005 25 juin 2005 à 14:47
Merci du tuyau c'est vrai que ce n'est pas très interessant mais c'est simplement un exercice de TP que l'on a fait.
Gobillot
Messages postés3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 201934 24 juin 2005 à 20:09
Pour la précision du calcul de Pi c'est pas très intéressant
par contre ça peut servir à tester une fonction congruente
à condition de faire quelques modifications:
- Randomize à mettre une seule fois en début de programme
- un DoEvents dans la boucle de calcul
- optimisation du calcul:
- puissance de 2 remplaçé par une simple multiplication
- puissance 0.5 inutile ici
For i = 1 To nb_tir
x = Rnd
y = Rnd
R = (x * x + y * y)
If R <1 Then tir_inf tir_inf + 1
DoEvents
Next i
pour une boucle complète avec Rnd de Vb (16777216 cas)
résultat = 3.1415867805481
conclusion:
test passé avec succès
27 juin 2005 à 22:31
on calcule par les séries
ATN(1) = 1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + 1/13 - 1/15 + ...
Dim i As Long
Dim a As Long
Dim b As Long
Dim x As Double
Dim pi As Double
a 3: x 1
For i = 1 To 10000000
b = a + 2
x = x - 1 / a + 1 / b
a = b + 2
Next
MsgBox "ATN(1)= " & x
MsgBox "pi=" & x * 4
27 juin 2005 à 21:40
;-)
Vive les maths...
27 juin 2005 à 15:39
27 juin 2005 à 15:36
27 juin 2005 à 08:11
pi = 4 * Atn(1)
et vous avez pi=3.14159265358979
26 juin 2005 à 23:08
Respect
26 juin 2005 à 18:43
- méthode des polygones
- méthode en arc tangente
- méthode des suites
- PI = 16arctg(1/5) - 4arctg(1/239)
- Pi = sum (1/16^i * (4/(8*i+1) - 2/(8*i+4) - 1/(8*i+5) - 1/(8*i+6)), i=0..infinity)
- et plein d'autres que j'arrive pas à copier ici
il existe aussi aussi des méthodes basées sur le hasard:
- les aiguilles de Buffon:
Le naturaliste français Georges Louis Leclerc comte de Buffon (1707-1788) montra que la probabilité pour qu'une aiguille de longueur L lancée sur un parquet dont les lattes ont une largeur L coupe le bord d'une latte est 2/Pi. Plus généralement, pour une aiguille de longueur a tombant sur des lattes de longueur b la probabilité est (2.a)/(b.Pi) .
i/n (2*a) / (b*Pi)> Pi = (2*a*n) / (b*i) , où n est le nombre d'aiguilles lancées et i le nombre d'intersections.
La méthode de Buffon repose sur l'hyposthèse que l'espace physique est euclidien, et comme les autres méthodes basée sur le hasard n'a pas une très bonne efficacité : on a calculé que pour obtenir une précision de 1/1000 avec une probabilité de 95% il faudrait lancer environ 9000000 aiguilles. Et de plus on ne sait jamais avec quelle précision on connaît Pi.
- les fléchettes de Monté-Carlo:
Dans cette méthode, il s'agit de calculer stastistiquement la surface d'un disque.
Soit un disque de rayon 1, sa surface vaut Pi*r^2 Pi*1*1 Pi, le carré circonscrit à lui une surface S = (2*r)^2 = 2*2 = 4. En considérant que l'on lance des fléchettes de manière totalement aléatoire (sans chercher à viser le centre), le rapport entre le nombre de fléchettes à l'intérieur du disque et celui à l'intérieur du carré est égal au rapport des surfaces.
Sur la figure, il y en a 23 à l'intérieur du disque et 32 à l'intérieur du carré (on ne tient pas compte des fléchettes à l'extérieur du carré) d'où : Pi/4 23/32 donc Pi 4*23/32 = 2,875.
Comme on peut s'en rendre compte cette technique n'est pas très performante comme toutes les techniques sur le hazard, car elles supposent un tirage aléatoire parfait, que l'on ne peut obtenir dans la pratique et qu'il faut lancer un nombre concidérable de fléchettes pour avoir une précision médiocre, et dont on n'est pas sûr à cause du fait que les tirages sont aléatoires.
- et d'autres méthodes
j'espère que ça répond à votre curosité
comme il faut un tirage aléatoire parfait, et un grand nombre de tirages sans être jamais sûr de la précision obtenue.
j'en ai conclu que plutôt d'espèrer calculer pi avec précision avec ces méthodes basées sur les nombres aléatoires, ça peut au contraire servir à tester les fonctions linéaires congruentielles qui permettrent de donner des nombres pas vraiment aléatoires, mais pseudo aléatoires.
- le résultat obtenue par le Rnd de Vb est tout à fait honorable je pense, faut pas espérer avoir plus.
rectifications: pour faire le tour complet avec vb il suffit de boucler 8388608 fois, puisqu'on prend 2 nombres à chaque fois,
inutile de faire de faire plus, puisqu'on retombera toujours sur les mêmes nombres.
- maintenant si vous créer votre propre fonction de tirage de nombres aléatoires, faut lui faire passer des tests, tests plus ou moins compliqués et très longs.
test du poker, test graphique, et plein d'autres
pouquoi pas le test du calcul de pi par la méthode du calcul aléatoire ?
26 juin 2005 à 17:56
En tout cas décidement, t'es un matheux JEROMEGEL ;-).
@+ tt le monde,
Scalpweb
25 juin 2005 à 19:02
:-/
25 juin 2005 à 14:47
24 juin 2005 à 20:09
par contre ça peut servir à tester une fonction congruente
à condition de faire quelques modifications:
- Randomize à mettre une seule fois en début de programme
- un DoEvents dans la boucle de calcul
- optimisation du calcul:
- puissance de 2 remplaçé par une simple multiplication
- puissance 0.5 inutile ici
For i = 1 To nb_tir
x = Rnd
y = Rnd
R = (x * x + y * y)
If R <1 Then tir_inf tir_inf + 1
DoEvents
Next i
pour une boucle complète avec Rnd de Vb (16777216 cas)
résultat = 3.1415867805481
conclusion:
test passé avec succès