让NaN回来了,不知道为什么

Getting NaN returned, unsure of why

本文关键字:不知道 为什么 回来了 NaN      更新时间:2023-10-16

我仔细检查了这段代码,寻找为什么我得到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吗?或者,有人看到一个明显的缺陷吗?谢谢你的建议

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

long double sum = 0;

main()中将dism变为dim:

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

你必须从main()中调用函数:

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

然后,为了输出sum,执行:

cout << sum;

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

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

更多信息

我用visual c++ .net构建了这个,

  1. sumArray不返回任何值
  2. 你的'dsim'变量应该写成'dim'

<

固定代码/strong>

#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;
}
相关文章: