nième implémentation racine
Je suis en train de travailler sur un moyen de calculer le nème de la racine d'un nombre. Cependant, je vais avoir des problèmes avec le nème racines de nombres négatifs.
La plupart des gens disent utiliser Math.pow(num, 1 /root)
mais cela ne fonctionne pas pour les nombres négatifs.
J'ai essayé ceci:
public static double root(double num, double root) {
if (num < 0) {
return -Math.pow(Math.abs(num), (1 / root));
}
return Math.pow(num, 1.0 / root);
}
mais, il ne fonctionne pas pour tous les numéros de la racine peut être un nombre décimal. Par exemple root(-26, 0.8)
retourne -58.71
mais c'est une entrée non valide. Cela permettra également de donner la mauvaise réponse, même pour les racines. Par exemple root(-2, 2)
retourne -1.41421
mais -2 n'ont pas de racine carrée.
source d'informationauteur Will | 2011-06-13
Vous devez vous connecter pour publier un commentaire.
Qu'essayez-vous de faire? Sauf si vous êtes planification à pleinement et de traiter correctement les nombres complexes vous ne pouvez pas prendre la racine nième d'un nombre négatif.
Par exemple, alors que
(-8)^(1/3)
a une branche principale de-2
les seules branches de(-4)^(1/2)
sont2i
et-2i
.Pour gérer cela correctement, vous devez transformer le nombre dans sa forme polaire et puis prendre la racine requis dans ce formulaire.
Donc
-8
est le nombre complexe8*exp(i*pi)
. Le1/3
racines qui sont2*exp(i*pi/3)
2*exp(i*pi)
et2*exp[i*(-pi)/3]
. Ensuite, vous pouvez utiliser de Moivre' formule pour calculer les racines sous la formea + bi
.(num) ^ (1/root)
est similaire àexp( (1/root) * log(num) )
de sorte que vous pouvez le faire comme:Soit utiliser l'un des nombreux complexes nombre de paquets disponibles sur l'Internet, ou de convertir votre numéro pour un plat rectangulaire de position sur la Argand avion, faites-le pivoter l'angle approprié est donnée par la racine, puis de le lire comme un (réel, imaginaire) paire.
Que vous pourriez faire
if(num < 0){
de retour en Mathématiques.abs(Math.pow(num, 1 /racine))
}
Ensuite, utilisez simplement " + "i" " chaque fois, indiquant que la valeur. Ou utiliser la valeur absolue pour les équations et, plus tard, facteur dans le positif/négatif et j'cas de besoin. C'est ce qui a fonctionné pour moi.
Cela devrait fonctionner pour vous, il n'est pas compact, il utilise que peu de fonctions mathématiques que possible.
Je ne suis pas trop sûr au sujet du code exact, mais ajouter un supplémentaire si l'instruction à clarifier entre pair et impair de racines. quelque chose le long des lignes de
Pas entièrement sûr si cela va fonctionner avec votre autre code, mais j'espère que cela peut aider
Système..println( Math.pow(10, les Maths.log10(Nombre)/racine));