В моем коде у меня есть это умножение в коде C++ со всеми типами переменных как double[]
f1[0] = (f1_rot[0] * xu[0]) + (f1_rot[1] * yu[0]);
f1[1] = (f1_rot[0] * xu[1]) + (f1_rot[1] * yu[1]);
f1[2] = (f1_rot[0] * xu[2]) + (f1_rot[1] * yu[2]);
f2[0] = (f2_rot[0] * xu[0]) + (f2_rot[1] * yu[0]);
f2[1] = (f2_rot[0] * xu[1]) + (f2_rot[1] * yu[1]);
f2[2] = (f2_rot[0] * xu[2]) + (f2_rot[1] * yu[2]);
соответствующие этим значениям
Force Rot1 : -5.39155e-07, -3.66312e-07
Force Rot2 : 4.04383e-07, -1.51852e-08
xu: 0.786857, 0.561981, 0.255018
yu: 0.534605, -0.82715, 0.173264
F1: -6.2007e-07, -4.61782e-16, -2.00963e-07
F2: 3.10073e-07, 2.39816e-07, 1.00494e-07
это умножение, в частности, дает неправильное значение -4,61782e-16 вместо 1,04745e-13.
f1[1] = (f1_rot[0] * xu[1]) + (f1_rot[1] * yu[1]);
Я вручную проверил другие умножения на калькуляторе, и все они, похоже, дают правильные значения.
это открытый код, скомпилированный с помощью mpi, и приведенный выше результат предназначен для работы одного процессора, существуют разные значения при работе с несколькими процессорами, например, 40 процессоров дают 1,66967e-13 в результате умножения F1[1].
Это какая-то ошибка mpi? или проблема точности типа? и почему это работает нормально для других умножений?
f1_rot
,xu
и т. д. не были установлены надежно до выполнения умножения). - person Gugi   schedule 26.06.2014