JavaScript:计算一个数字的第n个根
我正在尝试使用JavaScript获取数字的第n个根,但是我没有看到使用内置Math
对象的方法。 我可以俯视吗?
如果不…
有一个math库,我可以使用有这个function?
如果不…
什么是自己做这个最好的algorithm?
你能用这样的东西吗?
Math.pow(n, 1/root);
例如。
Math.pow(25, 1/2) == 5
x
第n
个根与x
的1/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){} }
x
第n
个根是一个数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.sqrt
和Math.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