我试图使用一个循环来近似C中的欧拉数,该循环在e的两个连续值之间的差小于0.0000001时终止。我得到的值是2.99。我试着设置它,以便在每次迭代中,e将与它自己的上一个值(保持在e1中)进行比较,如果差值大于0.0000001,它将添加另一个项1/(n!)。怎么了?我是编程新手,所以任何建议/批评都很感激。
#include <stdio.h>
int main()
{
float e1 = 0, e2 = 1;
int n = 1, nfact;
while ((e2 - e1) > 0.0000001)
{
e1 = e2;
nfact = 1;
for (int count = 1; count < n; count++)
{
nfact = n * count;
}
n = n + 1;
e2 = e1 + (1.0 / nfact);
}
printf("Approximated value of e = %f", e2);
return 0;
}
nfact = 1;
for (int count = 1; count < n; count++)
{
nfact = n * count;
}
不会计算CCD_ 1
nfact每次迭代都会得到一个全新的值。你的意思肯定是
nfact = 1;
for (int count = 2; count <= n; count++)
{
nfact *= count;
}
这不是计算数字阶乘的方法:
for (int count = 1; count < n; count++)
{
nfact = n * count;
}
请注意,在每次迭代中,您总是将nfact
的值指定为n*count
的值,从而删除nfact
的上一个值。这段代码相当于:
nfact = n*(n-1);
因为这是count
的最后一个值。
我想你想要这个:
nfact = n;
for (int count = n-1; count > 0; count--)
{
nfact = nfact * count;
}
这是我的通过使用以下公式来估计数学常数e的值:e=1+1/1!+1/2!+1/3!+。。。。
#include <stdio.h>
int main(void) {
int n = 0; /* loop counter for accuracy */
int accuracy = 10; /* current n factorial */
int fact = 1; /* degree of accuracy */
double e = 0; /* current estimated value of e */
/*循环直到准确度*/
while (n <= accuracy) {
if (n == 0) {
fact *= 1;
} else {
fact *= n;
}
e += 1.0 / fact;
++n;
}
printf("e is %f", e);
return 0;
}