Je sais que c'est une vieille question. Mais, en me basant sur la réponse de SwiftNinjaPro, j'ai simplifié la fonction et corrigé quelques problèmes de NaN. Note : Cette fonction utilise la fonctionnalité ES6, la fonction flèche et les chaînes de caractères modèles, ainsi que l'exponentiation. Elle peut donc ne pas fonctionner dans les anciens navigateurs :
Math.numberRoot = (x, n) => {
return (((x > 1 || x < -1) && n == 0) ? Infinity : ((x > 0 || x < 0) && n == 0) ? 1 : (x < 0 && n % 2 == 0) ? `${((x < 0 ? -x : x) ** (1 / n))}${"i"}` : (n == 3 && x < 0) ? -Math.cbrt(-x) : (x < 0) ? -((x < 0 ? -x : x) ** (1 / n)) : (n == 3 && x > 0 ? Math.cbrt(x) : (x < 0 ? -x : x) ** (1 / n)));
};
Exemple :
Math.numberRoot(-64, 3); // Returns -4
Exemple (résultat d'un nombre imaginaire) :
Math.numberRoot(-729, 6); // Returns a string containing "3i".
0 votes
Combien de racines voulez-vous ? Juste la plus évidente, ou toutes ?
0 votes
Les réponses évidentes utilisant Math.pow(x, 1/n) sont en dessous des réponses les plus élevées ici - ce que je ne comprends pas, car ces algos maison n'offrent rien de nouveau par rapport à l'utilisation de Math.pow. De plus, pour toute racine n-ième multiple de 2 ou 3, vous pouvez utiliser Math.sqrt ou Math.cbrt (qu'une réponse ci-dessous mentionne déjà), et les appeler en chaîne n fois pour obtenir toute racine 2^n ou 3^n-ième (avec n >= 1 évidemment). ou toute autre factorisation, comme la racine 6-ième serait Math.sqrt(Math.cbrt(x)) par exemple (ou l'inverse, peu importe).