我用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?
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
}