gpt4 book ai didi

c - 如何在 C 中逼近无穷级数中的 e

转载 作者:太空宇宙 更新时间:2023-11-04 05:43:12 25 4
gpt4 key购买 nike

所以我正在尝试做这个问题:

Problem

但是,我不完全确定从哪里开始或我到底在寻找什么。

此外,我被告知我应该期望为程序提供以下输入:零 (0)、非常小 (0.00001) 和不太小 (0.1)。

我得到了这个:http://en.wikipedia.org/wiki/E_%28mathematical_constant%29作为引用,但该公式看起来与问题中的公式并不完全相同。

最后,我被告知程序的输入是一个小数 Epsilon。例如,您可以假设为 0.00001f。

您不断添加无限级数,直到当前项的值低于 Epsilon。

但总而言之,我不知道这意味着什么。我有点理解维基上的等式。但是,我不确定从哪里开始解决给出的问题。看看它,有没有人知道我应该在 C 中使用什么样的公式以及“E”是什么以及它在这里发挥作用(即在公式中,我知道它应该是用户输入)。

到目前为止的代码

#include <stdio.h>
#include <math.h>

//Program that takes in multiple dates and determines the earliest one
int main(void)
{
float e = 0;
float s = 0;
float ct = 1;
float ot= 1;
int n = 0;
float i = 0;
float den = 0;
int count = 0;

printf("Enter a value for E: ");
scanf("%f", &e);

printf("The value of e is: %f", e);


for(n = 0; ct > e; n++)
{
count++;
printf("The value of the current term is: %f", ct);

printf("In here %d\n", count);

den = 0;

for(i = n; i > 0; i--)
{
den *= i;
}

//If the old term is one (meaning the very first term), then just set that to the current term
if (ot= 1)
{
ct = ot - (1.0/den);
}
//If n is even, add the term as per the rules of the formula
else if (n%2 == 0)
{
ct = ot + (1.0/den);
ot = ct;
}
//Else if n is odd, subtract the term as per the rules of the formula
else
{
ct = ot - (1.0/den);
ot = ct;
}

//If the current term becomes less than epsilon (the user input), printout the value and break from the loop
if (ct < epsilon)
{
printf("%f is less than %f",ct ,e);
break;
}
}

return 0;
}

当前输出

Enter a value for E: .00001
The value of e is: 0.000010
The value of the current term is: 1.000000
In here 1
-1.#INF00 is less than 0.000010

因此,根据每个人的评论,并像我被告知的那样使用维基百科中的第 4 个“紊乱”方程,这就是我想出的代码。我脑子里的逻辑似乎和大家一直在说的一致。但是输出根本不是我想要实现的。有没有人通过查看这段代码知道我可能做错了什么?

最佳答案

Σ 表示一个总和,因此您的等式意味着计算从 n=0 开始到无穷大的项的总和:

enter image description here

符号 n! 表示“阶乘”,它是数字 1 到 n 的乘积:

enter image description here

每次迭代计算得更准确代表实际值。 ε 是一个错误项,表示迭代的变化小于 ε 量。

要开始计算交互,您需要一些起始条件:

unsigned int n = 0; // Iteration.  Start with n=0;
double fact = 1; // 0! = 1. Keep running product of iteration numbers for factorial.
double sum = 0; // Starting summation. Keep a running sum of terms.
double last; // Sum of previous iteration for computing e
double e; // epsilon value for deciding when done.

那么算法就很简单了:

  1. 存储之前的总和。
  2. 计算下一个总和。
  3. 更新 n 并计算下一个阶乘。
  4. 检查新旧迭代的差异是否超过 epsilon。

代码:

do {
last = sum;
sum += 1/fact;
fact *= ++n;
} while(sum-last >= e);

关于c - 如何在 C 中逼近无穷级数中的 e,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12770533/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com