自然对数的定义是什么使用代码查找自然对数的值



我用HTML和JS创建了一个自然对数底的算法。这是代码:

HTML:bon.HTML

<html>
<head>
<title>bonl</title>
</head>
<body>
<script src="bonl.js"></script>
<input type="number" id="entered">
<input type="button" value="run" onclick="calculate()">
<div id="bonl">
</body>
</html>

和Javascript:bonl.js

function calculate() {
var x = document.getElementById('entered').value;
console.log(x);
var e = (1 + (1/x))**x;
console.log(e);
document.getElementById('bonl').innerHTML = e;
}

首先,为<输入类型=";数字";id=";输入">,然后单击名为"run"的按钮。之后,bonl.js中的var x将等于分配给"entered"的数字。然后,根据自然对数底的定义(e=lim x->inf(1+(1/x(**x((,Javascript文件将计算e;div id=";bonl">。

我希望您注意到,随着x的值越来越大,javascript文件可以更准确地计算自然对数的基数。

然而,我在<输入类型=";数字";id=";输入">,我得到的结果是1,而不是2.71828.,尽管当我在<输入类型=";数字";id=";输入">。

是我的计算机计算e很笨,还是我的代码有错误,或者e=1?

是的,你的电脑是哑的。它只能操作2^53以下的浮点数。当你超过这个值时,它会失去精度,1 + small number变成1:

for (let pow = 1; pow < 60; pow++) {
let n = 2 ** pow;
console.log('2^', pow, 'small=', 1 + 1/n, 'e=', (1 + 1/n)**n)
}

我们能做得更好吗?是的,我们可以!与其使用浮点数计算e,不如使用大整数计算some_big_number * e,与浮点运算不同,大整数具有无限精度。使用BigInts,我们可以计算任意数量的幂级数项:

let BIG = 10n ** 100n
let f = 1n
let e = BIG
let n = 1n

while (1) {
f = f * n
let eNext = e + BIG / f
if (eNext === e) {
document.write(`e = ${e} <br>`)
document.write(`terms = ${n} <br>`)
break
}
e = eNext
n += 1n
}

最新更新