Calcul d'exponentiel ( précision modifiable)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 425 fois - Téléchargée 18 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
Scupper Messages postés 28 Date d'inscription jeudi 15 octobre 2009 Statut Membre Dernière intervention 12 décembre 2013
1 févr. 2012 à 21:03
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
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 369
29 janv. 2012 à 13:28
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+
Scupper Messages postés 28 Date d'inscription jeudi 15 octobre 2009 Statut Membre Dernière intervention 12 décembre 2013
28 janv. 2012 à 23:50
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.