为什么我的计算给出'inf'而不是数字?

时间:2017-10-11 16:28:10

标签: c floating-point

此代码用于通过添加反因子来计算数学常数 e

#include <stdio.h>
void main()
{
    int i, n,a;
    float result=1;
    float sum;
    a=1;
    sum=0;
    printf("Enter a number:\n");
    scanf("%d",&n);

    for (i=0;i<=n-1;i++)
    {
        result=result*i;
        sum = a + (i/result);

    }

    printf("%.2f is the answer\n",sum );

}

而不是给出 e 的值,它产生inf is the answer

为什么我得到inf而不是2.78

1 个答案:

答案 0 :(得分:3)

您提到的错误源于您要除以0

你说你试图找到阶乘的总和,但你做了

sum = 1 + 0/0 sum = 1 + 1/0 sum = 1 + 2/0 ... sum = 1 + n/0

而不是

 sum = 0! + 1! + 2! + ... + n!

错误数量惊人!你不执行总和,你为每个不应该有任何项的术语引入了一个因子,你使用了阶乘而不是阶乘的内部,你添加了1,其中不应该有任何,并且你错误地计算了因子,因为你使0!等于0而不是1

替换

result=result*i;
sum = a + (i/result);

if (i)
    result=result*i;

sum = sum + result;

一个更简单的解决方案,它使用第一个项对变量进行种子处理,然后从第二个项开始循环。以下是使用更好的变量名称的解决方案:

int N;
int n;
int n_fact = 1;
int sum = 1;

printf("Enter the number of terms: \n");
scanf("%d", &N);

for (n=1; n<N; ++n) {
    n_fact *= n;
    sum += n_fact;
}

[我原本以为你试图计算 e 。如果情况确实如此,我将在这里留下原来的答案。]

您提到的错误源于您要除以0

您似乎正在尝试近似 e ,但您确实

e = 1 + 0/0 e = 1 + 1/0 e = 1 + 2/0 ... e = 1 + n/0

而不是

 e = 1/(0!) + 1/(1!) + 1/(2!) + ... + 1/(n!)

你犯了很多错误!你没有执行总和,你为每个不应该有的术语引入了一个因子,你添加了1不应该有的因素,并且你因为你0!而错误地计算了因子等于0而不是1

替换

result=result*i;
sum = a + (i/result);

if (i)
    result=result*i;

sum = sum + (1/result);

一个更简单的解决方案,它使用第一个项对变量进行种子处理,然后从第二个项开始循环。以下是使用更好的变量名称的解决方案:

int N;
int n;
int n_fact = 1;
float e = 1;

printf("Enter the number of terms: \n");
scanf("%d", &N);

for (n=1; n<N; ++n) {
    n_fact *= n;
    e += 1 / n_fact;
}