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

how many digits after decimal point can be stored in memory in javascript

本文关键字:小数点 内存 javascript 存储      更新时间:2023-09-26

我不理解javascript:中的这个问题

  1. 它可以容纳小数点后的多少位数
  2. 小数点后数字的值,它可以保持,是常数还是取决于小数点前的数字?即总数可以存储的位数是固定的,无论是在点之后还是之前

我使用mathjs数字类型作为变量,该变量在某个点存储函数的值。在mathjs的文档中,据说如果该值大于1.7976931348623157e+308,那么它将被转换为无穷大。但我确切地知道,我的函数的值从来都不是这样的,它的评估值要低得多。虽然我在处理后收到的结果是无限的。所以,也许是因为小数点后的位数更大,所以它可以容纳?如果是这样的话,如果我将返回的值四舍五入到它可以容纳的点后的位数,这可以吗?P.S.编号使用的库为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;
};

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

JavaScript使用的float只是一个数字的近似值!

关于float的更多见解:在Javascript 中处理浮点精度

关于你的无穷大问题的更多信息Aragorn:

浮点运算中的舍入误差。阅读更多:http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html