1

この 2D 配列があり、[5][5] の値をチェックしています。値は double として 1/11 または 0.0909 である必要があります。問題は、戻り値として 0 を取得していることです。

2D 配列が正しく実装されていることを確認しています。これはメイン内にあります。

    //start clock
clock_t time = clock();

int n;

printf("Please enter a value for n: ");

//get n
cin >> n;

printf("\nn = %i \n", n);

//allocate space for matrix A
double **A_n = new double*[n];
for (int k = 0; k < n; ++k) {
    A_n[k] = new double[n];
}

for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= n; ++j) {
        A_n[i-1][j-1] = (double)(1/(i+j-1));
    }
}

//Test Matrix A_n
printf("A_n[5][5] = %e \n", A_n[5][5]);
4

2 に答える 2

4

タイプキャストが間違った場所にあります。あなたの表現

(double)(1/(i+j-1))

ほとんどの場合0、整数除算によるものです。あなたは1いつ出ますかi == j == 1。あなたはおそらく欲しい:

1.0/(i+j-1)
于 2013-09-10T22:36:56.537 に答える
1

これがあなたの問題です:

    (double)(1/(i+j-1))

int を int で割って int を生成し、その後 double にキャストします。キャストの時点では、すでに 0 です。式の辺の 1 つは double でなければなりません。あなたはそれを行うことができます

    1 / (double)( i + j + 1 )

また

    1.0 / ( i + j + 1 )
于 2013-09-10T22:51:25.300 に答える