指数和阶乘的序列迭代产生意想不到的结果
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
我在学习过程中尝试了一项简单的任务,但我卡住了,并且得到了一些奇怪的结果。 我必须编写一个带有 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