Calcul de la nième racine en Java en utilisant la méthode de puissance
J'ai essayé d'obtenir une racine cubique en java à l'aide de Math.pow(n, 1.0/3)
mais parce qu'il divise en double, il ne renvoie pas la réponse exacte. Par exemple, plus de 125, ce qui donne 4.9999999999. Est-il une solution pour cela? Je sais qu'il y est une racine cubique de la fonction, mais je voudrais corriger ce que je puisse calculer les racines d'ordre plus élevé.
Je ne voudrais pas rond parce que je veux savoir si un nombre est un entier de la racine en faisant quelque chose comme ceci: Math.pow(n, 1.0 /3) % ((int) Math.pow(n, 1.0 /3))
.
source d'informationauteur Sara Alaa Khodeir
Vous devez vous connecter pour publier un commentaire.
La Mathématiques.tour fonction de la ronde à la plus proche valeur de type long qui peut être stocké pour une double. Vous pouvez comparer les 2 résultats pour voir si le nombre est un entier racine cubique.
Si c'est insuffisant, vous pouvez essayer de la mise en œuvre de cette algorithme et de l'arrêt précoce si le résultat ne semble pas être un nombre entier.
Puisqu'il n'est pas possible d'avoir une précision arbitraire calcul avec
double
vous avez trois choix:double
valeur est un entier ou pas.double
que vous avez est un résultat correct.BigDecimal
objet, qui prend en charge une précision arbitraire des valeurs double.Option 1
Le problème avec cette approche est de savoir comment définir "assez près". C'est une question subjective et dépend de vos besoins.
Option 2
L'avantage de cette méthode est qu'il n'est pas nécessaire de définir une précision. Cependant, nous avons besoin d'effectuer un autre
pow
opération de sorte que cela va affecter les performances.Option 3
Il n'est pas intégré dans la méthode pour calculer un double de la puissance d'un BigDecimal. Cette question vous donnera un aperçu sur la façon de le faire.
J'irais pour la mise en œuvre de ma propre fonction pour ce faire, éventuellement sur la base de cette méthode.
J'ai écrit cette méthode pour calculer
floor(x^(1/n))
oùx
est un non négatifBigInteger
etn
est un entier positif. C'était il y a un moment maintenant, donc je ne peux pas expliquer pourquoi cela fonctionne, mais je suis raisonnablement certain que, lorsque je l'ai écrit, j'ai été heureux qu'il est garanti à donner la bonne réponse assez rapidement.Pour voir si
x
est exacten-th
de puissance, vous pouvez vérifier si le résultat à la puissancen
vous donne exactementx
de retour à nouveau.Pour l'utiliser:
Modifier
Après avoir lu les commentaires plus haut, j'ai maintenant, rappelez-vous que c'est le Newton-Raphson la méthode pour la n-ième racines. Le Newton-Raphson la méthode a convergence quadratique (qui en langage de tous les jours signifie qu'il est rapide). Vous pouvez l'essayer sur les nombres qui ont des dizaines de chiffres et vous devriez obtenir la réponse en une fraction de seconde.
Vous pouvez adapter la méthode à travailler avec d'autres types de numéro, mais
double
etBigDecimal
sont à mon avis pas adapté pour ce genre de chose.Eh bien, ce est une bonne option à choisir dans cette situation.
Vous pouvez compter sur cette-
C'est assez moche hack, mais vous pourriez atteindre quelques-uns d'entre eux par le biais de l'indentation.
Qui vous donnera toutes les n^3 cube et toutes les n^2 racine.