1

我有这个二维数组,我正在检查 [5][5] 处的值。该值应为 1/11 或 0.0909 作为双精度数。问题是我得到 0 作为返回值。

我正在检查以确保我已经正确实现了二维数组。这是主要的。

    //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)( i + j + 1 )

或者

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