2013-09-10 4 views
1

이 2D 배열이 있고 [5] [5]에서 값을 확인하고 있습니다. 값은 double 값으로 1/11 또는 0.0909 여야합니다. 문제는 반환 값으로 0을 얻는다는 것입니다.2D 배열 반환 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

귀하의 입력은 틀린 장소에 있습니다. 표현식

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

은 정수 분할로 인해 항상 항상 0입니다. i == j == 1 일 때 1을 출력합니다. 당신은 아마 원하는 : 당신은 int를 생산할 예정하는 int와 int를 분할하고 그 후 당신이 두 배로 캐스트

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

:

1.0/(i+j-1) 
1

는 여기에 귀하의 문제입니다. 주조 시점에서 이미 0입니다. 표현의 측면 중 하나는 이중이어야합니다. 당신은

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

또는

1.0/(i + j + 1) 
+1

'1.0f'는'float' 아닌'double'이라고 할 수있다. –

+0

Ups 내 나쁜 :) 늦은 시간, 뇌가 더 이상 작동하지 않습니다 :) – LemonMooseTom