微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决自然对数的定义是什么? - 使用代码查找自然对数的值

我用 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 万亿.

是我的电脑笨到无法计算 e,还是我的代码错误,还是 e = 1?

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 举报,一经查实,本站将立刻删除。