JavaScript:计算一个数字的第n个根

我正在尝试使用JavaScript获取数字的第n个根,但是我没有看到使用内置Math对象的方法。 我可以俯视吗?
如果不…

有一个math库,我可以使用有这个function?
如果不…

什么是自己做这个最好的algorithm?

你能用这样的东西吗?

 Math.pow(n, 1/root); 

例如。

 Math.pow(25, 1/2) == 5 

xn个根与x1/n的幂相同。 您可以简单地使用Math.pow

 var original = 1000; var fourthRoot = Math.pow(original, 1/4); original == Math.pow(fourthRoot, 4); // (ignoring floating-point error) 

使用Math.pow()

请注意,它不会很好地处理负面 – 这是一个讨论和一些代码

http://cwestblog.com/2011/05/06/cube-root-an-beyond/

 function nthroot(x, n) { try { var negate = n % 2 == 1 && x < 0; if(negate) x = -x; var possible = Math.pow(x, 1 / n); n = Math.pow(possible, n); if(Math.abs(x - n) < 1 && (x > 0 == n > 0)) return negate ? -possible : possible; } catch(e){} } 

xn个根是一个数r ,使得1/n的幂为x

实际上,有一些子分类:

  • x是正数, r是偶数时,有两个解(符号相反)。
  • x是正数而r是奇数时有一个正解。
  • x是负数且r是奇数时有一个负面的解。
  • x是负数且r是偶数时,没有解决scheme。

由于Math.pow不喜欢带有非整数指数的负数基数,因此可以使用

 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); } 

例子:

 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) 

你可以使用

 Math.nthroot = function(x,n) { //if x is negative function returns NaN return this.exp((1/n)*this.log(x)); } //call using Math.nthroot(); 

对于正方形和立方根的特殊情况,最好分别使用原生函数Math.sqrtMath.cbrt

从ES7开始, 指数运算符**可以用来计算第n个根作为非负基的1 / n次方:

 let root1 = Math.PI ** (1 / 3); // cube root of π let root2 = 81 ** 0.25; // 4th root of 81 

不过这不适用于负面的基础。

 let root3 = (-32) ** 5; // NaN