簡體   English   中英

自然對數的定義是什么? - 使用代碼查找自然對數的值

[英]What is the definition of the natural logarithm? - Finding the value of natural logarithm using codes

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

首先,為 <input type="number" id="entered"> 分配一個數字值,然后單擊名為“運行”的按鈕。 之后,bonl.js 中的 var x 將等於分配給 'entered' 的數字。 然后根據自然對數底的定義(e = lim x->inf (1+(1/x)**x)),Javascript文件會計算出e。 結果將由 <div id="bonl"> 顯示。

我希望您注意到隨着 x 的值變大,javascript 文件會更准確地計算自然對數的底數。

但是,我在 <input type="number" id="entered"> 中輸入了大約 10 萬億,我得到的結果是 1 而不是 2.71828..,盡管當我在 <input type 中輸入 100 萬億時得到 2.71828 ="數字" id="輸入">。

我的計算機是笨拙地計算 e,還是我的代碼中有錯誤,或者 e = 1?

是的,你的電腦很笨。 它只能操作 2^53 以下的浮點數。 當您在 go 上面時,它會失去精度,並且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 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM