0

e の 2 つの連続する値の差が 0.0000001 未満になると終了するループを使用して、C でオイラー数を概算しようとしています。得られる値は 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;
}
4

3 に答える 3

1

これは、数値の階乗を計算する方法ではありません。

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;
}
于 2014-11-01T21:24:54.100 に答える
1
nfact = 1;
for (int count = 1; count < n; count++)     
{
    nfact = n * count;
}

計算しませんn!
nfact は、反復ごとにまったく新しい値を取得します。確かにあなたは意味します

nfact = 1;
for (int count = 2; count <= n; count++)     
{
    nfact *= count;
}
于 2014-11-01T21:25:28.637 に答える