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 éclairé
    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
    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 : 408
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 : 55
    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
    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))
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  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 : 55
    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
    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
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  4. #4
    Membre éclairé
    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
    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