Невозможно получить доступ к данным из Express API из вызова React Axios, но получить данные через браузер

Здесь много ответов, но никто, кажется, действительно не объяснил, почему именно rand () всегда генерирует одну и ту же последовательность с тем же семенем - или даже то, что семя действительно делает. Итак, здесь идет.

Функция rand () поддерживает внутреннее состояние. Понятно, что это можно рассматривать как глобальную переменную некоторого типа rand_state. Каждый раз, когда вы вызываете rand (), он выполняет две вещи. Он использует существующее состояние для вычисления нового состояния и использует новое состояние для вычисления числа, возвращаемого вам:

state_t rand_state = INITIAL_STATE;

state_t calculate_next_state(state_t s);
int calculate_return_value(state_t s);

int rand(void)
{
    rand_state = calculate_next_state(rand_state);
    return calculate_return_value(rand_state);
}

Теперь вы можете видеть, что каждый раз, когда вы вызываете rand (), это собирается сделать rand_state перемещаться на один шаг по заранее определенному пути. Случайные значения, которые вы видите, основаны только на том, где вы находитесь по этому пути, поэтому они также будут следовать заранее определенной последовательности.

Теперь вот где происходит srand (). Это позволяет вам прыгать в другую точку на пути:

state_t generate_random_state(unsigned int seed);

void srand(unsigned int seed)
{
    rand_state = generate_random_state(seed);
}

Точные детали state_t, calculate_next_state (), calculate_return_value () и generate_random_state () могут варьироваться от платформы к платформе, но они обычно довольно просты.

Вы можете видеть из этого, что каждый раз, когда запускается ваша программа, rand_state будет начинаться с INITIAL_STATE (что эквивалентно generate_random_state (1)) - вот почему вы всегда получаете одну и ту же последовательность, если вы 't использовать srand ().

0
задан laneherby 18 January 2019 в 03:49
поделиться