Почему мы выполняем XOR с 4101842887655102017 при реализации Ranq1 в числовых рецептах (C++)?

Добрый день всем. Я читаю книгу "Числовые рецепты" (издание 3) Уильяма Х. Пресса, Сола А. Теукольски, Уильяма Т. Веттерлинга.

На странице 351 приведен пример составленного генератора случайных чисел. Я могу понять весь код построчно, но с трудом могу понять, почему между v^j выполняется операция XOR. Может ли кто-нибудь объяснить, почему мы выполняем XOR между семенем и v?

struct Ranq1 {
Ullong v; //the long long 64-bit variable (typedef)
Ranq1(Ullong j): v(4101842887655102017LL) {
    v^=j; 
    v = int64();
}
//Xorshift algorithm to generate uniform random numbers with 
inline Ullong int64() {
    v ^= v >> 21;
    v ^= v <<35;
    v ^= v >> 4; 
    return v * 2685821657736338717LL; //d1

}
};

Буду благодарен за любые идеи и помощь!

0 ответов

Другие вопросы по тегам