它非常接近但只有一个号码关闭。如果你可以在这里改变任何东西以使其更好,那么我们将不胜感激。我将我的号码与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
答案 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:
答案 3 :(得分:0)
我喜欢使用整数值来逼近真实值
e的增加精度的可能近似值为:
11/4
32分之87
8544分之23225
3442297523731/1266350489376
最后一个相当准确,等同于:
2.7182818284590452213260834432
从wikipedia's value到18日不分开:
2.71828182845904523536028747135266249775724709369995
所以,如果你有兴趣的话。