1

它非常接近,但只有一个数字。如果您可以在这里更改任何内容以使其更好,我们将不胜感激。我正在比较我的号码,Math.E看看我是否接近。

var e = (function() {
    var factorial = function(n) {
        var a = 1;
        for (var i = 1; i <= n; i++) {
            a = a * i;
        }
        return a;

    };
    for (var k = 0, b = []; k < 18; k++) {
        b.push(b.length ? b[k - 1] + 1 / factorial(k) : 1 / factorial(k));
    }
    return b[b.length - 1];
})();
document.write(e);document.write('<br />'+ Math.E);​

我的号码:2.7182818284590455
Math.E:2.718281828459045

4

4 回答 4

2

从较高的数字到较低的数字以最大程度地减少取消:

var e = 1;
for(var k = 17; k > 0; --k) {
    e = 1 + e/k;
}
return e;

通过霍纳规则评估泰勒多项式甚至可以避免阶乘并允许您使用更多项(但不会超过 17 项)。

于 2012-06-07T15:03:21.563 回答
1

据我所知,您的数字与您的数字相同Math.E,甚至具有更好的精度。

2.7182818284590455

2.718281828459045

到底是什么问题?

于 2012-06-07T14:55:41.243 回答
1

使用 javascript,由于 javascript 计算的精度级别,您无法以这种方式计算e 。有关详细信息,请参阅http://www.javascripter.net/faq/accuracy.htm

为了演示这个问题,请看下面的小提琴,它计算 e 和 n 从 50000000 开始,每 10 毫秒将 n 递增 1:

http://jsfiddle.net/q8xRs/1/

于 2012-06-07T17:34:14.460 回答
0

我喜欢使用整数值来近似真实值。
e 的可能近似值按精度递增顺序为:
11/4
87/32
23225/8544
3442297523731/1266350489376

That last one is fairly accurate, equating to:
2.7182818284590452213260834432
which doesn't diverge from wikipedia's value till the 18th:
2.71828182845904523536028747135266249775724709369995

So there's that, if you're interested.

于 2012-06-11T12:50:53.320 回答