Calcul d'exponentiel ( précision modifiable)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 805 fois - Téléchargée 17 fois

Contenu du snippet

En utilisant la décomposition d'exponentiel en série de Taylor et en faisant varier le N on peut avoir plus de précision de calcul.
Ceci dit, les fonctions utilisée seront basée sur la formule :

Exp := x -> limit(
sum(x^k/factorial(k), k = 0 .. N),
N = infinity);

Source / Exemple :


package ma.scupper.mathematics.analysis.functions;

import java.math.BigDecimal;
import java.math.BigInteger;
import java.math.MathContext;

public class Math {

    public static BigInteger fact(BigInteger N){
        BigInteger X = N;
        if(N.compareTo(BigInteger.ONE)<=0){
            return BigInteger.ONE;
        }else{
            while(N.compareTo(BigInteger.ONE)==1){
                X = X .multiply((N = N.subtract(BigInteger.ONE)));
            }
        }
        return X ;
    }

    public static BigDecimal exp(BigDecimal X,int n){
        BigDecimal sol = BigDecimal.ZERO;
        int i = 0;
        while(i<n){
            BigDecimal fact = new BigDecimal(fact(new BigInteger(""+i)).toString());
            sol = sol.add(X.pow(i).divide(fact, MathContext.DECIMAL128));
            i++;
        }
        return sol;
    }

    public static void main(String[] args){
       System.out.println("Une approximation de 'e' est :");
       System.out.println(Math.exp(BigDecimal.ONE, 512));
    }

}

Conclusion :


Comme résultat, on a :

run:
Une approximation de 'e' est :
2.718281828459045235360287471352662534187335061208892853797762322506268877836352226461490684087799214387760549345830852702867058062785782957018763886394568657179490796938102931705261316129775668659823552016284515197243973868460846206948356045980848897563310344908264292399588399295233782618669955532376863811203071047510306047893241154736852670330508229646343933082939191901665025418745931647745317117553068339401201877931931564835607810594725317832138035157187323496320016332318340413725117468584336650776557863433196763851847464173221278061568451929721417360785571864907034934295504810659777221655424296144571964727552411633419257185848343130941813917004816420077843639286273263356207403725506310654613254894033897860798205759960928158621702155133124751959083681594942639707461684216935324687722721715886534712200610332997937318017919245233899121605709862124470652266522379712441322008390760554080077900029034931666355189037453836270849228918823551060457852826134976940205714464151761253407635948388436847456243294223307476360294482436827651631274254453936594262594360058581428362875871509526747346205363302517928924609301239721223457284016018537457015613499304986225103604272721693695298433976175
BUILD SUCCESSFUL (total time: 2 seconds)

A voir également

Ajouter un commentaire Commentaires
Messages postés
28
Date d'inscription
jeudi 15 octobre 2009
Statut
Membre
Dernière intervention
12 décembre 2013

C'est pas vraiment ce que je voulais en mettant ce code en ligne , le but c'était si une personne voulais améliorer le code : je connais d'autre algorithmes mais qui n'ont pas vraiment une grande précision. Je sais bien que c'est plus de math que de code ...

Sinon c'est une démo pour les débutants :D
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
359
Bonjour,

Tu peux toujours utiliser Math.exp() qui te donne l'exponentielle d'un double.

Etant donné que ton code pourrait remplacé par une ligne, l'utilité de la sources n'est pas certaine. Je pense malgré tout que c'est un exercice que beaucoup d'étudiants ont eu à faire et donc elle pourra resservir.

Par contre, si on a besoin de connaitre la valeur d'une exponentielle, c'est totalement inutile.

a+
Messages postés
28
Date d'inscription
jeudi 15 octobre 2009
Statut
Membre
Dernière intervention
12 décembre 2013

Si une personne connait une méthode qui pourrait donner plus de précision avec moins de complexité, qu'elle la poste, je serais ravis de faire toute modification pertinente :D

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.