让NaN回来,不确定原因

时间:2015-10-23 07:23:49

标签: c++ matrix nan

我已经搜索了这段代码,寻找为什么我将NaN作为输出来计算三维矩阵的数量。这是矩阵的创建,每个值为3.6:

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命令中添加什么特殊内容才能使其不输出为nan? 或者,有没有人看到一个明显的缺陷?谢谢你提前提出任何建议。

2 个答案:

答案 0 :(得分:1)

首先,在sumArray()中初始化变量sum:

long double sum = 0;

main()dism更改为dim

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

你必须从main()

调用函数
sumArray(my3DArray,5,5,5); // random values

然后,为了打印总和,请执行:

cout << sum;

在第一个for循环之后,最后确保delete你的数组,释放内存

答案 1 :(得分:0)

你得到NaN,因为你的sumArray函数没有返回任何值。

更多信息

我使用visual c ++ .net,

构建了这个
  1. sumArray不会返回任何值
  2. 你的&#ds;&#39;变量应写成&#39; dim&#39;
  3. 固定代码

    #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;
    }