需要帮助近似欧拉常数

时间:2012-06-07 14:52:54

标签: javascript math

它非常接近但只有一个号码关闭。如果你可以在这里改变任何东西以使其更好,那么我们将不胜感激。我将我的号码与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 个答案:

答案 0 :(得分:2)

从较高的数字到较低的数字工作,以尽量减少取消:

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

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

答案 1 :(得分:1)

据我所知,您的号码与Math.E相同,甚至更精确。

2.7182818284590455

2.718281828459045

毕竟有什么问题?

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:0)

我喜欢使用整数值来逼近真实值 e的增加精度的可能近似值为:
11/4
32分之87
8544分之23225
3442297523731/1266350489376

最后一个相当准确,等同于:
2.7182818284590452213260834432
wikipedia's value到18日不分开:
2.71828182845904523536028747135266249775724709369995

所以,如果你有兴趣的话。