我已经搜索了这段代码,寻找为什么我将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?
或者,有没有人看到一个明显的缺陷?谢谢你提前提出任何建议。
答案 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,
构建了这个固定代码
#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;
}