Pi ...

cs_Anotine Messages postés 64 Date d'inscription mardi 22 juin 2004 Statut Membre Dernière intervention 14 septembre 2008 - 10 sept. 2006 à 10:32
cs_loulou69 Messages postés 672 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 2 juin 2016 - 11 sept. 2006 à 10:08
   Bonjour ... Pour calculer Pi j'utilise un algorithme, celui de Ramanujan ... Pour l'exécuter j'ai besoin d'un type de variable qui supporte plus de milles décimales ! Si vous en connaissaient un ca serais bien
Merci !

   En attendant voici l'algorithme avec des Double :










Function
Pi()

As





Double

   Dim
P1

As



Double


= 9801 / (2 * Math.Sqrt(2))


   Dim
P2

As





Double

   Dim
Incr

As





Integer

   For
Incr = 0

To


173  ' Maxi que supporte Double


      Dim
P2a

As



Double


= Math.Exp(4 * Incr) * (1103 + (26390 * Incr))


      Dim
P2b

As



Double

= (Math.Exp(Incr) ^ 4) * (396 ^ (4 * Incr))
      P2 += P2a / P2b


   Next

   Return


P1 * (P2 ^ (-1))


End



Function

Configuration : Visual Studio 2005

3 réponses

Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
10 sept. 2006 à 11:16
Tu dois passer soit par des tableaux d'entiers, soit par des strings... Le sujet m'intéresse, je vais essayer de faire un objet qui permet ce calcul, je te le posterai tantot....

Julien.
0
cedvinc Messages postés 19 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 15 décembre 2007
10 sept. 2006 à 16:41
Bonjour,

Tu peux aussi utiliser la méthode de Monte Carlo qui consiste à calculer
le nombre PI, basée sur le calcul du nombre de
point appartenant au cercle de rayon unité et à l'intervalle de 0 à 1. En calculant la
surface qu’occupent les points, il obtient le nombre PI.

Le principe
consiste à:
- Tirer
aléatoirement (utilisant la fonction RND) un certain nombre (N) de points
définis par un couple de valeurs (X et Y) dans l'intervalle 0 à 1;
- Si le
point appartient à la surface C, il est comptabilisé.

En prenant un cercle de rayon 1 situé sur un repère x=0 et y =0 (simplifie pour la fonction du nombre aléatoire, on a le code:

Exemple:
For
a = 1 To N
     x = Rnd()
     y = Rnd()
     If
y * y + x * x <= 1 Then
      
c = c + 1
   End If
 Next
 Text2.Text
= 4 * c / N

Avec N le nombre de points (par ex: 1000) et c est le nombre de points présent dans le cercle de rayon 1
0
cs_loulou69 Messages postés 672 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 2 juin 2016 1
11 sept. 2006 à 10:08
Bonjour
Avec les formules de Ramanujan (génie divin parmi les génies), tu es sur la bonne voie.

Certains diront que le calcul de pi est une quête sans intérêt.
Les benchmarks (tests) de processeurs utilise le calcul de Pi pour mesurer leur puissance.

VB n'est pas le language approprié pour calculer les décimales de Pi.

En son temps, le dinosaure que je suis, a effectué le même type de quête en basic puis en assembleur en utilisant le développement limité de ArcTangente.

Le développement de Arctangente permet en effectuant des multiplications d'entier et des divisions par 2 (facile en assembleur décalage d'un bit) d'obtenir le résultat.
J'avais utilisé : Pi/4 = 4 * Arctan(1/5)- ArcTan(1/239) peut être pas très rapide

Là ou en Basic , j'obtenais dans un temps donné quelques centaines de décimales, en assembleur, et quelques centaines de milliers de décimales avec le même algorythme. (1000 fois plus dans le même temps avec un CPU à quelques centaines de Hz : Motorola 6809)

Pour dire qu'il vaut mieux abandonner VB si le but est d'obtenir un record.

Aujourd'hui je chercherai à savoir quelle est la formule la plus rapide.

Bon courage
0
Rejoignez-nous