Я пытаюсь заполнить динамически распределенные массивы числами, которые вычисляются в программе. Один из этих массивов очень большой (1000 x 900 x 3).C++ - двойная точность приводит к недетерминированному выводу, float не
Если я заполняю его удвоениями, выход программы иногда будет разумным, но при последовательных запусках одного и того же кода будут созданы разные выходы. В большинстве случаев они становятся абсурдно огромными (10e + 74 или 10e + 228). Однако, если я использую поплавки для этого конкретного массива, все в порядке - числа разумны и воспроизводимы.
Любые мысли, почему это происходит? Еще более важно: Могу ли я просто держать плавающей или может ли быть большая проблема, которая нуждается в дальнейшем исследовании
Edit:
Вычисленное записи из большого массива:
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;
Я не хочу публиковать весь код, он очень большой. Если вы хотите увидеть что-нибудь еще, сообщите мне.
Edit 2:
После перезаписи программы с 3D-векторов, которые ничего не меняют. В конце концов я узнал, что я использовал четное число для размеров массива. Изменение его (и интервалов dx и dy) на нечетное число исправляет проблему. Любые мысли об этом явлении?
Показать код – Spo1ler
Похоже, что у вас есть ошибка в коде. –
Не видя кода, который управляет данными, немного сложно предложить что-то полезное. –