[英]how many digits after decimal point can be stored in memory in javascript
我不明白javascript中的這個問題:
我使用 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.