Почему результат изменения цикла, когда я добавляю задержку на каждом шаге в C? - PullRequest
0 голосов
/ 28 сентября 2019

Я использую C, чтобы запустить симуляцию.Изменяет значения массива в каждой итерации.Я фиксирую общее количество итераций.Есть два массива, в то время как я использую 1 для обновления 2 в нечетных шагах и 2 для обновления 1 в четных шагах.Бывает, что когда я добавляю какую-то неважную команду в цикл, результат меняется, но результаты совпадают, когда я запускаю один и тот же код несколько раз.

Я думал, что это может быть связано с процессором или памятью.Какова возможная причина этого?

Например, я добавляю функцию printf в цикл, и результат отличается от отсутствия функции printf.Я попытался добавить sleep (1) в цикл, и, как и ожидалось, результат изменился.

// This is an illustration code.
TOTAL_STEP = 3000,
int i, j, k, t=0;
double a[I][J][K];
double b[I][J][K];

while (t < TOTAL_STEP)
{
    if (odd step)
    {
        for (i = 0; i < I; i++)
        {
            for (j = 0; j < J; j++)
            {
                for (k = 0; k < K; k++)
                 {
                     b[i][j][k] = some_function(a);
                 }
            }
    }
    else
    {
        for (i = 0; i < I; i++)
        {
            for (j = 0; j < J; j++)
            {
                for (k = 0; k < K; k++)
                 {
                     a[i][j][k] = some_function(b);
                 }
            }
    }
    t++;
    printf("  %2.5f \n", a[0][1][1])  // adding this will change the result
    sleep(1)  // adding this will also change the result
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...