2015-10-23 2 views
-3

Я просмотрел этот код, ища, почему я получаю NaN в качестве вывода для суммирования чисел трехмерной матрицы. Вот создание матрицы, причем каждое значение составляет 3.6:Получение NaN, неуверенный в том, почему

int dim = 100; 
double ***my3DArray = new double**[dim]; 
for(int i = 0; i < dim; i++) { 
    my3DArray[i] = new double*[dim]; 
    for(int j = 0; j < dim; j++) { 
     my3DArray[i][j] = new double[dim]; 
     for (int k = 0; k < dim; k++) { 
     my3DArray[i][j][k] = 3.6; 
     } 
    } 
} 

И вот итог:

long double sumArray(double*** a3DArray, int m, int n, int l) { 
    long double sum; 
    int i, j, k; 
    for (i = 0; i < m; i++) { 
     for (j = 0; j < n; j++) { 
      for (k = 0; k < l; k++) { 
       sum += a3DArray[i][j][k]; 
      } 
     } 
    } 
} 

Есть ли что-нибудь особенное, я должен поставить в команде cout сделать это не выход как нан? Или кто-нибудь видит вопиющий недостаток? Спасибо за любой совет раньше времени.

+4

инициализации переменной суммой, долго двойная сумма = 0 – vishal

+0

Что такое 'dsim' в этой строке:' для (INT I = 0; i

+0

@vishal О, человек, спасибо. Я ненавижу простые ошибки. – rigatoni

ответ

1

Во-первых, инициализировать переменную сумму в sumArray():

long double sum = 0; 

В main() изменения dism в dim:

for(int i = 0; i < dim; i++) 

Вы должны вызвать функцию из main():

sumArray(my3DArray,5,5,5); // random values 

, то для того, чтобы ИНТ суммы, сделайте следующее:

cout << sum; 

после первого цикла для, и, наконец, убедитесь, что ваш delete массива, чтобы освободить память

+0

Я бы также упомянул, что должна быть 'return sum' в sumArray() после замыкающей скобки для цикла (i .. m). – Artalus

0

Вы получаете NaN, потому что ваша функция sumArray не возвращает никакого значения.

Подробнее

Я построил это с помощью Visual C++ .net,

  1. sumArray не возвращает никакого значения
  2. Ваша переменная 'dsim' должно быть записано как 'тусклый'

Фиксированный код

#include "stdafx.h" 
using namespace System; 

long double sumArray(double*** a3DArray, int m, int n, int l) { 
    long double sum; 
    int i, j, k; 
    for (i = 0; i < m; i++) { 
     for (j = 0; j < n; j++) { 
      for (k = 0; k < l; k++) { 
       sum += a3DArray[i][j][k]; 
      } 
     } 
    } 
    return sum; 
} 

int main(array<System::String ^> ^args) 
{ 
    int dim = 100; 
    double ***my3DArray = new double**[dim]; 
    for (int i = 0; i < dim; i++) { 
     my3DArray[i] = new double*[dim]; 
     for (int j = 0; j < dim; j++) { 
      my3DArray[i][j] = new double[dim]; 
      for (int k = 0; k < dim; k++) { 
       my3DArray[i][j][k] = 3.6; 
      } 
     } 
    } 

    Double d = sumArray(my3DArray, 100, 100, 100); 
    Console::WriteLine(d.ToString()); 

    return 0; 
} 
Смежные вопросы