我在javascript中不明白这个问题:
我使用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;
};
答案 0 :(得分:0)
哦,这是一个棘手的问题。您将存储没有固定的数字位数。事实上,它们甚至都不准确!
JavaScript正在使用float
,它只是数字的近似值!
在此float
更多地了解{{1}}
Aragorn
>关于您的无限问题的更多信息:在浮点运算中称为舍入误差。阅读更多:Dealing with float precision in Javascript