[英]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.