【发布时间】:2015-05-07 18:36:43
【问题描述】:
我尝试用程序中计算的数字填充动态分配的数组。 其中一个阵列非常大(1000 x 900 x 3)。
如果我用双精度数填充它,程序输出偶尔会是合理的,但在相同代码的连续运行中会创建不同的输出。在大多数情况下,它们变得异常巨大(10e+74 或 10e+228)。 但是,如果我为该特定数组使用浮点数,一切都很好 - 数字是合理且可重现的。
任何想法为什么会发生这种情况? 更重要的是:我可以只保留浮动数字还是可能存在需要进一步调查的更大问题
编辑:
这计算了大数组的条目:
T[it+1][ix][iy] = T[it][ix][iy] + ((1/(dx*dx))*(T[it][ix+1][iy] - 2*T[it][ix][iy] + T[it][ix-1][iy]) + (1/(dy*dy))*(T[it][ix][iy+1] - 2*T[it][ix][iy] + T[it][ix][iy-1]) + M_SQRT2*cos(iy*dy)- Pe*((1/((2*dx)))*vx[it][ix][iy]*(T[it][ix+1][iy]-T[it][ix-1][iy]) + (1/(2*dy))*vy[it][ix][iy]*(T[it][ix][iy+1] - T[it][ix][iy-1])))*dt;
我不想发布整个代码,它太大了。如果您还想看其他内容,请告诉我。
编辑 2:
用 3D 向量重写程序后,并没有改变任何东西。我最终发现,我对数组大小使用了偶数。将其(以及间隔 dx 和 dy)更改为奇数可以解决此问题。对这种现象有什么想法吗?
【问题讨论】:
-
听起来你的代码有错误。
-
没有看到操纵数据的代码,很难提出一些有用的建议。
-
我只是想知道在使用双精度而不是浮点数时这种行为是否常见,即是否是使用浮点数而不是双精度数的典型指示。
-
我建议将代码精简到重现问题所需的最低限度。您可能会在该过程中发现错误 - 删除应该不相关的内容会使程序正常工作。如果没有,您将有一些可以发布的内容。
标签: c++ floating-point double dynamic-arrays dynamic-allocation