7 votes

Calcul du nombre d'Euler BigDecimal pour émuler Math.exp(double a)

Existe-t-il un moyen généralement accepté d'obtenir le nombre d'Euler en BigDecimal ?

Je veux essentiellement faire Math.exp(double a) et je veux essentiellement la même fonction mais calculée en utilisant BigDecimal pour éviter la perte de précision avec d'autres calculs.

J'ai pensé simplement faire,

BigDecimal.valueOf(Math.E).pow(BigDecimal.SOMEOTHERNUMBER)

Mais je ne suis pas sûr que ce soit la bonne façon d'aborder le problème.

4voto

Jerry Andrews Points 755

Le problème est que le nombre d'Euler est irrationnel; en BigDecimal, vous auriez besoin d'une mémoire infinie pour le contenir. La raison pour laquelle il n'y a pas de valeur préalablement stockée est que peu importe le nombre de décimales dont vous aviez besoin, vous n'auriez pas le bon nombre pour votre application actuelle.

Vous allez devoir déterminer combien de décimales vous voulez, puis construire la représentation BigDecimal en utilisant le constructeur de String (new BigDecimal("2.71828...")).

1voto

Jon Lin Points 88615

Eh bien, Math.E est un double. Si vous voulez une représentation plus précise du nombre d'Euler, vous pouvez la créer avec une précision arbitraire de décimales, ou il existe des bibliothèques de mathématiques BigDecimal avec une version vraiment haute précision de E.

Vous pourriez en approximer un vous-même avec quelque chose comme ceci: Meilleure approximation de e avec Java

1voto

Alex Fischer Points 497

Alors que le double Math.E devrait être assez précis pour la plupart des calculs, il existe un moyen de calculer e avec une précision supérieure.

Si vous voulez obtenir e avec une précision supérieure à ce que le double peut contenir, vous le calculez en ajoutant la somme de 1/0 !, 1/1 !, 1/2 !, 1/3 !...

Où ! signifie factorielle. Il suffit d'ajouter le réciproque de toutes les factorielles à partir de zéro. Plus vous ajoutez de termes, plus vous obtiendrez de précision. Bien sûr, étant donné que e est irrationnel, vous ne pourrez jamais obtenir la valeur réelle, mais vous pouvez vous en approcher assez près.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X