El n
-Racine de x
est un nombre r
tal que r
au pouvoir de 1/n
es x
.
Dans les nombres réels, il y a des sous-cas :
- Il y a deux solutions (même valeur avec un signe opposé) quand
x
est positif et r
est égale.
- Il existe une solution positive lorsque
x
est positif et r
est impair.
- Il existe une solution négative lorsque
x
est négatif et r
est impair.
- Il n'y a pas de solution lorsque
x
est négatif et r
est égale.
Depuis Math.pow
n'aime pas une base négative avec un exposant non entier, vous pouvez utiliser
function nthRoot(x, n) {
if(x < 0 && n%2 != 1) return NaN; // Not well defined
return (x < 0 ? -1 : 1) * Math.pow(Math.abs(x), 1/n);
}
Exemples :
nthRoot(+4, 2); // 2 (the positive is chosen, but -2 is a solution too)
nthRoot(+8, 3); // 2 (this is the only solution)
nthRoot(-8, 3); // -2 (this is the only solution)
nthRoot(-4, 2); // NaN (there is no solution)
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).