Java西格玛表示法

Java西格玛表示法,java,taylor-series,Java,Taylor Series,我正在为学校做一个项目。本项目为公式ex求解x,可定义为: 这是我的代码(注意“x”的值为5以便于调试,这一点很重要): 但它应该是这样的: 11: ans: ..., calc: 1.2232474797578965 12: ans: ..., calc: 0.5096864498991235 13: ans: ..., calc: 0.19603324996120136 14: ans: ..., calc: 0.07

我正在为学校做一个项目。本项目为公式ex求解x,可定义为:

这是我的代码(注意“x”的值为5以便于调试,这一点很重要):

但它应该是这样的:

11: ans: ...,          calc: 1.2232474797578965
12: ans: ...,          calc: 0.5096864498991235
13: ans: ...,          calc: 0.19603324996120136
14: ans: ...,          calc: 0.07001187498614334
15: ans: ...,          calc: 0.02333729166204778

我的代码从迭代0-12生成完全正确的数字。在第13次迭代中发生了什么导致它突然产生一个奇怪的数字?

在第13次迭代中,您出现了溢出

13!=6227020800>2^31,这是Java中最大的有效
int
值。 要解决这个问题,您可以使用
long
甚至
biginger
BigDecimal


另外,请注意计算x^n/n!相当于(x^(n-1)/(n-1)!)*(x/n)。这提供了一种根本不会溢出的迭代方法

在第13次迭代中,出现了溢出

13!=6227020800>2^31,这是Java中最大的有效
int
值。 要解决这个问题,您可以使用
long
甚至
biginger
BigDecimal


另外,请注意计算x^n/n!相当于(x^(n-1)/(n-1)!)*(x/n)。这提供了一种根本不会溢出的迭代方法

在迭代13发生的事情保持在迭代13。在迭代13发生的事情保持在迭代13。
0: ans: 0.0,          calc: 1.0
1: ans: 1.0,          calc: 5.0
2: ans: 6.0,          calc: 12.5
3: ans: 18.5,          calc: 20.833333333333332
4: ans: 39.33333333333333,          calc: 26.041666666666668
5: ans: 65.375,          calc: 26.041666666666668
6: ans: 91.41666666666667,          calc: 21.70138888888889
7: ans: 113.11805555555556,          calc: 15.500992063492063
8: ans: 128.61904761904762,          calc: 9.68812003968254
9: ans: 138.30716765873015,          calc: 5.3822889109347445
10: ans: 143.68945656966488,          calc: 2.6911444554673722
11: ans: 146.38060102513225,          calc: 1.2232474797578965
12: ans: 147.60384850489015,          calc: 0.5096864498991235
13: ans: 148.1135349547893,          calc: 0.568434188872778
14: ans: 148.68196914366206,          calc: 2.8421709443638896
15: ans: 151.52414008802594,          calc: 14.210854721819448
11: ans: ...,          calc: 1.2232474797578965
12: ans: ...,          calc: 0.5096864498991235
13: ans: ...,          calc: 0.19603324996120136
14: ans: ...,          calc: 0.07001187498614334
15: ans: ...,          calc: 0.02333729166204778