Javascript 大十进制 - N 次方根

标签 javascript math bigdecimal

最近我遇到了众所周知的 Javascript 浮点精度错误。通常我会避免在瘦客户端上进行浮点计算,而是将其留给后端。

我开始使用 big.js由 Michael Mclaughlin 创建的库。尽管它具有平方根方法/函数,但它没有 n 次方根方法/函数,幂函数也不支持分数值作为参数。

所以我想知道是否有人使用该库来扩展它以具有这样的功能,或者至少使用它来计算准确的 n 次方根结果。

Michael Mclaughlin建议我实现这样一个结构类似于平方根函数的函数。然而,我试图理解逻辑证明了我的数学障碍,导致简单的计算产生非常错误的结果。

Rosetta Code 上使用算法也会产生不正确的结果。

所以我想知道是否有人使用该库来扩展它以具有这样的功能,或者至少使用它来计算准确的 n 次方根结果。

这是我最后一次尝试的代码:

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

最佳答案

牛顿法只给出了根的近似值,所以应该是 3.0000xxx。如果您知道答案应该是一个整数,您可以将 r 向下舍入(牛顿法高估了根)并检查 r^n=x

关于Javascript 大十进制 - N 次方根,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17342901/

相关文章:

javascript - 从 javascript 对象向 html 中的表格行添加元素

javascript - Angularjs 中的温度中位数

Javascript计算浮点值错误

javascript - Math.pow 和无穷大

java - 字符串到 BigDecimal 值

javascript - 如何使用 ColdFusion 将表单输入保存到 session 变量中?

javascript - 避免在主干事件处理程序中使用 event.preventDefault() 样板

algorithm - 类背包优化问题的遗传算法

java - 即使精度超过可用数字,格式也不打印所有两位数

java - BigDecimal.setScale(int,int)和RoundingMode枚举不推荐使用的构造函数