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

Java Discussion :

BigDecimal pour calculer une valeur approchée de PI


Sujet :

Java

  1. #1
    Membre habitué
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2010
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 212
    Points : 184
    Points
    184
    Par défaut BigDecimal pour calculer une valeur approchée de PI
    Bonjour,
    j'aimerais calculer une valeur approchée de PI (100 chiffres aprés la virgule), en utilisant la formule:
    Nom : PI.jpg
Affichages : 381
Taille : 3,9 Ko
    j'ai utilisé la classe BigDecimal.
    voici mon essai:
    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
    23
    public class Test {
            public static  void main(String [] args){
                int arrondi = BigDecimal.ROUND_HALF_DOWN;
                int precision= 100;
                BigDecimal sp = BigDecimal.ZERO, r;
                BigDecimal quatre = new BigDecimal(4).setScale(precision);
                BigDecimal un = BigDecimal.ONE;
                BigDecimal deux = new BigDecimal(2).setScale(precision);
                BigDecimal unDemi = un.divide(deux,arrondi).setScale(precision);
                System.out.println(unDemi);
                BigDecimal n = new BigDecimal(100000);
                    for(int i = 1; i<=n.doubleValue();i++){
                    r = new BigDecimal(i);
                    r = r.subtract(unDemi);
                    r = r.divide(n, arrondi);
                    r = r.pow(2);
                    r = r.add(BigDecimal.ONE).multiply(n);
                    sp = sp.add(quatre).divide(r,arrondi);
                    }
                System.out.println(sp);
            }
     
    }
    résultats obtenus:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    0E-100
    0.0000200001000015000225003875070626284396390861793124959014337545572838089788991370816448576580885970
    les questions qui se posent sont:
    1- pour quoi le calcul de 1/2 avec la classe BigDecimal a donné 0.
    2- pour quoi ce programme ne donne pas le résultat attendu.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    1) parce que les précisions de un et deux sont 0 : soit tu fais un = new BigDecimal(1).setScale(precision), soit tu indiques la précision lors de la division : un.divide(deux, precision, arrondi).
    2) parce que tu as fait une erreur de position de parenthèses dans sp = sp.add(quatre).divide(r,arrondi);, qui signifie sp = ( sp + 4 ) / r, et pas sp = sp + ( 4/r).
    Il fallait donc écrire : sp.add(quatre.divide(r,precision,arrondi))

  3. #3
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Accessoirement, pour information, tu peux indiquer tes formules par la balise [LATEX].

    [latex]\pi \approx \sum\limits_{i=1}^n \frac{1}{n}{\frac{4}{1+((i-\frac{1}{2})\frac{1}{n})^2}} [/latex]

    Formule mathématique

  4. #4
    Membre habitué
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2010
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 212
    Points : 184
    Points
    184
    Par défaut
    merci infiniment.

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 20/11/2014, 14h49
  2. [XL-2007] Syntaxe pour calculer une valeur et la renvoyer dans une autre feuille
    Par fabdu25 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 24/07/2014, 11h08
  3. [DeskI XiR2] Compter des valeurs même identiques pour calculer une moyenne
    Par courti01 dans le forum Débuter
    Réponses: 4
    Dernier message: 14/10/2010, 09h00
  4. Decode avec des dates pour calculer une valeur
    Par decisio dans le forum Langage SQL
    Réponses: 1
    Dernier message: 19/01/2009, 12h50
  5. problème pour récupérer une valeur dans ma bd (débutante)
    Par auryn111 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 26/08/2005, 17h49

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