最近我遇到了Javascript的著名浮点精度错误。通常情况下,我会避免在薄客户端上进行浮点计算,并将其留给后端。
我开始使用Michael Mclaughlin创建的big.js库。虽然它有一个平方根方法/函数,但它没有一个nth-root方法/函数,也不支持分数值作为参数的幂函数。
所以我想知道是否有人使用该库扩展了这样的函数或至少使用它来计算准确的nth-root结果。 Michael Mclaughlin建议我实现类似于平方根函数结构的函数。然而,我的尝试理解逻辑证明了我的数学残疾,导致简单的计算产生非常错误的结果。
在Rosetta Code上使用的算法也会产生不正确的结果。
所以我想知道是否有人使用该库扩展了这样的函数或至少使用它来计算准确的nth-root结果。
它甚至不能正确得出明显的结果,比如81的4次方根=3,而是得到3.00000000xxx。
我开始使用Michael Mclaughlin创建的big.js库。虽然它有一个平方根方法/函数,但它没有一个nth-root方法/函数,也不支持分数值作为参数的幂函数。
所以我想知道是否有人使用该库扩展了这样的函数或至少使用它来计算准确的nth-root结果。 Michael Mclaughlin建议我实现类似于平方根函数结构的函数。然而,我的尝试理解逻辑证明了我的数学残疾,导致简单的计算产生非常错误的结果。
在Rosetta Code上使用的算法也会产生不正确的结果。
所以我想知道是否有人使用该库扩展了这样的函数或至少使用它来计算准确的nth-root结果。
这是我最后一次尝试的代码:
P['nthrt'] = P['nthroot'] = function (n, prec)
{
var negate, r,
x = this,
xc = x['c'],
i = x['s'],
e = x['e'];
// Argument defaults
n = n || 2;
prec = prec || 12;
// Zero?
if ( !xc[0] ) {
return new Big(x)
}
// Negative?
negate = ( n % 2 == 1 && i < 0 );
// Estimate.
r = new Big(1); // Initial guess.
for (var i = 0; i < prec; i++) {
r = (ONE.div(n)).times(r.times(n-1).plus(x.div(r.pow(n-1))));
}
if (negate) r['s'] = -1;
return r;
};
它甚至不能正确得出明显的结果,比如81的4次方根=3,而是得到3.00000000xxx。
x^n-num
的根(我可能会挑剔它对prec
ision的使用)。您能展示一下产生错误结果的代码吗? - Teepeemm