指数和阶乘的序列迭代产生意想不到的结果

Sequence Iteration with Exponent and Factorial Produces Unexpected Results

我在学习过程中尝试了一项简单的任务,但我卡住了,并且得到了一些奇怪的结果。 我必须编写一个带有 2 个参数 'x' 和 'a' 的简单方法。此方法的结果必须是所有 xk/k 的总和!其中k从0开始到无穷大,'a'是精度的参数。

Here how it looks

但我不知道为什么当我将 Console.Write 放入循环中时,数字表现得很疯狂 I have this for x = 2 and x = 6

此外,当我尝试将我的代码放入方法中并使用结果时,也没有任何反应。 我有另一种数学阶乘的方法来计算k!

decimal wynik = 0;
int x = 2;
int a = 6;

for (int k = 1; k > 0; k++)
{
    if (Algorithms.Factorial(k) > 0)
    {
        wynik += Math.Round(Convert.ToDecimal(Math.Pow(x, k)) / 
                            Algorithms.Factorial(k), a);
    
        Console.WriteLine(wynik);
    }
}
    
Console.WriteLine(wynik);

Factorial方法

static public int Factorial(int n)
{
    int wynik = 1;
    
    for (int i = 1; i <= n; i++)
    {
        wynik *= i;
    }
    
    return wynik;
}

当然我想以方法结束并返回结果但是为了练习我在 Main 方法中工作 非常感谢您的帮助!

阶乘增长非常快,请看

  13! = 6227020800 > int.MaxValue

这就是为什么在 static public int Factorial(int n) 中返回 int 很可能会导致 整数溢出 和奇怪的结果。 x ** k 也增长得很快(尽管 that 不像阶乘那么快)。让这些大数相互抵消

  double x = 2;

  double tolerance = 0.00001;

  double result = 1.0; // x**0 / 0! == 1 / 1 == 1
  double term = 1.0;

  for (int k = 1; term > tolerance; ++k) {
    // given term = (x ** (k - 1)) / (k - 1)! 
    // we can compute next term as
    term = term * x / k;

    result += term;
  } 

  // Let's have a look (in fact, you have Taylor serie for exp)
  Console.WriteLine($"actual   : {result} (+/- {tolerance:0.##############})";
  Console.WriteLine($"expected : {Math.Exp(x)}"");

结果:

actual   : 7.3890545668323435 (+/- 0.00001)
expected : 7.38905609893065