我可能在这里发疯了,但我一直在重新编译完全相同的代码,并得到不同的答案。我根本没有使用任何随机值。我严格遵守 float 和一维数组(我想最终将其移植到 CUDA)。
是否有可能在编译器方面,我的相同代码以一种使其根本无法工作的方式被重写?
我只需单击它即可运行 .exe,它运行良好,但是当我单击“编译并运行”(Dev C++ 4.9.9.2) 时,我的图像都无法正确显示。 ......虽然有时他们会这样做。
...关于我如何解决这个问题的任何见解?如果我能提供更多帮助,请告诉我。
非常感谢。
编辑: 这是代码块,如果我将其注释掉,一切都会正常运行。 (如果我把这个 block 注释掉,它是完全确定的) -这是一个电磁模拟器,如果有帮助的话:
//***********************************************************************
// Update HZ in PML regions (hzx,hzy)
//***********************************************************************
boundaryIndex = 0;
for (regionIndex = 1; regionIndex < NUMBEROFREGIONS; regionIndex++) {
xStart = regionData[regionIndex].xStart;
xStop = regionData[regionIndex].xStop ;
yStart = regionData[regionIndex].yStart;
yStop = regionData[regionIndex].yStop ;
for (i = xStart; i < xStop; i++) {
for (j = yStart; j < yStop; j++) {
hzx = hz[i*xSize+j] - hzy[boundaryIndex]; // extract hzx
hzx = dahz[i*xSize+j] * hzx + dbhz[i*xSize+j] * ( ey[i*(xSize+1)+j] - ey[(i+1)*(xSize+1)+j] ); // dahz,dbhz holds dahzx,dbhzx
hzy[boundaryIndex] = dahzy[boundaryIndex] * hzy[boundaryIndex] + dbhzy[boundaryIndex] * ( ex[i*ySize+j+1] - ex[i*ySize+j] );
hz[i*xSize+j] = hzx + hzy[boundaryIndex]; // update hz
boundaryIndex++;
} //jForLoop /
} //iForLoop /
} //
其中,NUMBEROFREGIONS 为常数(8),Xsize 在编译时定义(此处为 128)。
最佳答案
好吧,一些代码示例会有所帮助!但这是未初始化变量的典型症状。
您没有设置一些重要的变量(索引为 0,切换为 True 等),因此您的程序每次运行时都会选择内存中的任何值。 由于这些实际上是随机值,您每次都会得到不同的结果。
关于c - 是什么导致我的代码不确定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4222094/