簡體   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