如何解决自然对数的定义是什么? - 使用代码查找自然对数的值
我用 HTML 和 JS 创建了一个以自然对数为底的算法。这是代码:
HTML:bonl.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;
}
首先,您为 分配一个数字值,然后单击名为“运行”的按钮。之后, bonl.js 中的 var x 将等于分配给“输入”的数字。然后,根据自然对数底的定义(e = lim x->inf (1+(1/x)**x)),Javascript文件会计算e。结果将通过
我希望你注意到随着 x 的值变大,javascript 文件会更准确地计算自然对数的底。
但是,我在 中输入了大约 10 千万亿,而我得到的结果是 1 而不是 2.71828..,尽管当我输入 100 万亿.
1 个答案:
答案 0 :(得分:0)
是的,你的电脑很笨。它只能操作 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
}
解决方法
是的,你的电脑很笨。它只能操作 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
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。