小数点后的位数可以在javascript中存储在内存中

时间:2015-11-26 19:30:01

标签: javascript floating-point numbers

我在javascript中不明白这个问题:

  1. 小数点后可以容纳多少位?
  2. 小数点后的数字值,它可以容纳,是否恒定或取决于点之前的位数?即总数 无论是在点之前还是之前,可以存储的位数是固定的吗?
  3. 我使用mathjs数字类型作为在某个点存储函数值的变量。在mathjs的Docs中,据说如果该值大于1.7976931348623157e + 308,那么它将被转换为Infinity。但我确切地知道我的函数的值永远不会那样,它被评估为更低的值。虽然我在处理后收到的结果是Infinity。所以也许是因为小数点后的位数比它可以容纳的大?如果是这样,如果我将返回值四舍五入到它可以容纳的点之后的数字,那么这是否正常? 附:用于编号的库是http://mathjs.org/

    function calc(f, a, b, tol, k_max) {
        var starttime = performance.now();
        iter = 0;
    
        a = math.number(a);
        b = math.number(b);
        tol = math.number(tol);
        k_max = math.number(k_max);
        var x1, x2, f1, f2, iter = 0;
        var parser = math.parser();
        x1 = a + (3 - math.sqrt(5)) * (b - a) / 2;
        x2 = a + b - x1;
    
        while (math.abs(b - a) > tol && iter < k_max) {
            iter++;
            parser.set('x', x1);
            f1 = parser.eval(f);
            parser.set('x', x2);
            f2 = parser.eval(f);
            if (f1 < f2) {
                b = x2;
                x2 = x1;
                x1 = a + b - x1;
            } else {
                a = x1;
                x1 = x2;
                x2 = a + b - x2;
            }
        }
        var x = (a + b) / 2;
        parser.set('x', x);
        var f = parser.eval(f);
        var elapsedtime = math.string(math.format(performance.now() - starttime, { notation: 'fixed', precision: 2 })) + " ms";
        result = {
            x: x,
            f_x: f,
            iter: iter,
            b_a: math.abs(b - a),
            elapsed: elapsedtime,
            loading: false
        };
        return result;
    };
    

1 个答案:

答案 0 :(得分:0)

哦,这是一个棘手的问题。您将存储没有固定的数字位数。事实上,它们甚至都不准确!

JavaScript正在使用float,它只是数字的近似值!

在此float更多地了解{{1}}

Aragorn

>关于您的无限问题的更多信息:

  

在浮点运算中称为舍入误差。阅读更多:Dealing with float precision in Javascript