我有这个2D数组,我正在检查[5] [5]的值。该值应为1/11或0.0909作为double。问题是我得到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]);
答案 0 :(得分:4)
您的类型转换位置错误。你的表达
(double)(1/(i+j-1))
由于整数除法,几乎总是0
。 1
时,您会收到i == j == 1
。你可能想要:
1.0/(i+j-1)
答案 1 :(得分:1)
这是你的问题:
(double)(1/(i+j-1))
将int分隔为int,这将生成一个int,然后将其转换为double。在施法时它已经是0。 表达的一面必须是双重的。你可以那样做
1 / (double)( i + j + 1 )
或
1.0 / ( i + j + 1 )