IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Pascal Discussion :

Valeur approchée de la constante PI par la méthode de Wallis


Sujet :

Pascal

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 19
    Points : 19
    Points
    19
    Par défaut Valeur approchée de la constante PI par la méthode de Wallis
    Bonjour,
    y a-t-il quelqu'un qui peut m'aider ?
    Je cherche la valeur approchée de la constante PI par la méthode de Wallis
    [PI = 2*(2/1 * 2/3 * 4/3 * 4/5 * 6/5 * 6/7 * ....)]
    Voilà ma proposition, théoriquement ça marche mais sur la machine elle m'affiche 0.00000000
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    uses wincrt;
    const
    eps=10E-6;
    var
    p1,p2:real;
    i,n,d:integer;
    begin
        p2:=2;
        i:=2;
        n:=2;
        d:=3;
        repeat
            p1:=p2;
            p2:=p2*(n/d);
            if (i mod 2=0) then
                n:=n+2
                else
                d:=d+2;
            i:=i+1;
        until abs(2*p2-2*p1)<eps;
        write('La valeur approchée est : ',2*p2:0:10);
    end.
    merci d'avance.

  2. #2
    Membre confirmé
    Homme Profil pro
    .
    Inscrit en
    Juin 2002
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : .
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2002
    Messages : 239
    Points : 567
    Points
    567
    Par défaut
    Bonjour.

    La formule de Wallis donne une suite qui converge vers Pi, mais cette suite converge très lentement vers Pi.

    Pour obtenir une précision de 10E-6, il faut calculer un nombre énorme de termes.
    Ce nombre est supérieur à 2^16 = 65536.

    La variable n est déclarée comme une variable entière ; elle est donc stockée sur deux octets c'est-à-dire sur 16 bits.
    Comme cette variable n est initialisée à 2 puis incrémentée de 2 une fois sur deux, elle finit par atteindre la valeur 65536, c'est-à-dire qu'elle est remise à 0.
    Et quand n vaut 0, p2 prend la valeur 0 aussi.
    L'algorithme s'arrête alors et affiche le résultat obtenu, à savoir 0.

    Pour éviter ce problème, on peut :

    1) demander une précision inférieure, par exemple 10E-1, afin que la variable n n'atteigne pas la valeur 65536.

    2) déclarer la variable n comme un longint ( elle sera alors stockée sur 4 octets ), voire même la déclarer comme un real.
    Il faut faire de même pour la variable d, sinon d va passer de 65535 à 1 et le résultat sera faux.

  3. #3
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 19
    Points : 19
    Points
    19
    Par défaut
    merci beaucoup

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Réponse à Bzinfo
    tes variables N et D doivent être déclarées en tant que LONGINT car leurs incrémentation pour une telle précision 0.000001 dépassent nécessairement la limite sup des entiers

  5. #5
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    on peut aussi éviter le modulo

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    var
      p: Double;
      i: Integer;
      n: Double;
    begin
      p := 2;
      for i := 1 to 100000 do // choix du nombre d'itération
      begin
        n := 2 * i;
        p := p * n/(n-1) * n/(n+1);
      end;
    end;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD12] Valeurs des constantes définies par WD/WB/WM
    Par =JBO= dans le forum WinDev
    Réponses: 3
    Dernier message: 22/10/2009, 12h19
  2. Exercice de calcul de valeur approchée
    Par annoussa dans le forum Pascal
    Réponses: 8
    Dernier message: 22/10/2006, 10h51
  3. Réponses: 6
    Dernier message: 22/08/2006, 15h37
  4. Modifier une valeur dans un fichier sans passer par l'éditeur
    Par elkhy dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 09/06/2006, 00h15
  5. valeur d'un champ text modifié par une variable en parametre
    Par klimero dans le forum Général JavaScript
    Réponses: 21
    Dernier message: 21/04/2006, 10h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo