Existe-t-il des bibliothèques pour la racine carrée sur BigDecimal en Java?Existe-t-il des bibliothèques pour la racine carrée sur BigDecimal?
Répondre
JScience v4.3.1 a une classe Real
qui semble être l'équivalent de BigDecimal
et qui pourrait vous aider. Un exemple d'utilisation:
// The Square Root of Two, to 30 digits
// According to "The Square Root of Two, to 5 million digits."
// Source: http://www.gutenberg.org/files/129/129.txt
System.out.println("1.41421356237309504880168872420");
// Using JScience with 50 digits precision
Real.setExactPrecision(50);
System.out.println(Real.valueOf(2).sqrt());
// Using default java implementation
System.out.println(Math.sqrt(2));
> 1.41421356237309504880168872420
> 1.414213562373095048801689
> 1.4142135623730951
Modifier: Mis à jour le code et les liens pour refléter la version en vigueur au moment (v4.3.1). Basé sur @ile an @Tomasz commentaires, merci.
Fantastique, merci! –
J'ai téléchargé le package JScience et il semble qu'il n'y ait plus de Decimal. Le lien ci-dessus est cassé. –
Il a une classe LargeInteger qui semble équivalente http://jscience.org/api/org/jscience/mathematics/number/LargeInteger.html –
Essayez Big Square Roots. Il utilise le Newton's method pour approcher des solutions telles que les racines carrées.
Le lien est rompu. Mais je peux obtenir ce qui semble être le même code https://ritdml.rit.edu/bitstream/handle/1850/8800/BigSquareRoot.java?sequence=4 – demongolem
Lien dans le commentaire de demongolem est également cassé –
(Ce ne peut être une solution pour vous)
Tant que votre BigDecimal est dans la gamme de double, vous pouvez convertir le BigDecimal doubler, utiliser Math.sqrt() et promouvoir le double back à BigDecimal. Ce sera probablement plus rapide que de faire le calcul sur BigDecimals. Dans de nombreux cas, la perte de précision due à la conversion entre les types sera négligeable par rapport à l'erreur inévitable dans le calcul de la racine carrée.
Je me demande, pourquoi avez-vous besoin de calculer les racines carrées d'un BigDecimal? Double a trop petite portée? –
Pour la même raison, tout le monde utilise BigDecimal: le double manque de précision. –
Daniel, mais aussi le calcul de la racine carrée. Vous ne pouvez pas calculer sqrt (2) avec une précision infinie. L'utilisation de la méthode de Newton pour calculer la racine carrée introduit une erreur propre, inhérente à l'algorithme. –