Почему мы выполняем 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
}
};
Буду благодарен за любые идеи и помощь!