繁体   English   中英

javascript中可以在内存中存储小数点后多少位数字

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

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

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

我使用 mathjs 数字类型作为在特定点存储函数值的变量。 并且在 mathjs 的文档中说,如果该值大于 1.7976931348623157e+308 那么它将被转换为无穷大。 但我确切地知道我的函数的价值从来没有像那样,它被评估为低得多的价值。 虽然我处理后收到的结果是无穷大。 那么也许是因为它可以容纳的小数点后位数更大? 如果是这样,如果我将返回的值四舍五入到它可以容纳的点之后的位数,这会好吗? PS用于数字的库是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 中的浮点精度

阿拉贡关于你的无限问题的更多信息:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM