/ / Trouver le nombre d’or avec précision jusqu’à 20 décimales - java, décimal, calculatrice

Trouver le nombre d'or avec précision jusqu'à 20 décimales - java, décimal, calculatrice

Le nombre d'or est un rapport spécial qui peut être lié au rapport entre les différentes dimensions des parties d'un organisme vivant.

Mathématiquement, il peut être trouvé par la formule suivante:
(1 racine carrée (5)) / 2)

En utilisant n’importe quel type de données, je ne pouvais pas stocker une telle valeur. double est le meilleur, mais je ne peux pas utiliser 20 décimales.

Alors, j'ai pensé, si je peux trouver les derniers chiffres dele ratio après le calcul, puis enregistrez-le dans une variable et continuez ainsi. Au final, j'aurais pu le compléter en joignant les décimales les unes après les autres.

exemple: à partir de 1.61083, je voudrais extraire 3,0,8,0,1,6 et le rejoindre.

Néanmoins, j’ai toujours des problèmes, car même pendant le calcul, une variable aussi précise n’est pas utilisée.

Quelqu'un peut aider?

Réponses:

4 pour la réponse № 1

java.math.BigDecimal est votre chemin à parcourir

BigDecimal.ONE.add(new BigDecimal(Math.sqrt(5))).divide(new BigDecimal(2))

représente la formule que vous avez postée et vous retournerez 1.6180339887498949025257388711906969547271728515625

C'est-à-dire jusqu'à 49 décimales


0 pour la réponse № 2

Vous pouvez utiliser java.math.BigDecimal comme mentionné par @Philipp. mais le problème suivant est que java ne fournit pas de fonction sqrt pour BigDecimals. Alors voici votre sortie. J'ai trouvé ce code quelque part qui peut vous aider à calculer plus ou moins le nombre de BigDecimals.

public static BigDecimal sqrt(BigDecimal d, int precison) {
BigDecimal TWO =BigDecimal.valueOf(2);
MathContext mc = new MathContext(precison);
BigDecimal res = BigDecimal.ONE;
for(int i=1;i<=precison;i++) {
res = res.add(d.divide(res,mc)).divide(TWO,mc);
}

return res;

}

0 pour la réponse № 3

En utilisant ce post calculer la racine carrée:

    BigDecimal five = new BigDecimal(5);
BigDecimal two = new BigDecimal(2);

BigDecimal x = new BigDecimal(Math.sqrt(five.doubleValue()));
BigDecimal sqrt_five =  x.add(new BigDecimal(five.subtract(x.multiply(x)).doubleValue() / (x.doubleValue() * 2.0)));
System.out.println(BigDecimal.ONE.add(sqrt_five).divide(two));

Vous obtenez: 1.6180339887498948484545683436564162626707022223739506413642905463708132618451885185185

J'espère que cela aide.