#include <stdint.h>
#include <stdio.h>
// Глобальное 64-битное состояние
static uint64_t sm_state = 12345ULL;
uint64_t splitmix64(void) {
// 1. Продвигаем состояние обычной константой
uint64_t z = (sm_state += 0x9e3779b97f4a7c15ULL);
// 2. Агрессивно перемешиваем биты (Avalanche effect)
z = (z ^ (z >> 30)) * 0xbf58476d1ce4e5b9ULL;
z = (z ^ (z >> 27)) * 0x94d049bb133111ebULL;
return z ^ (z >> 31);
}
int main(void) {
for (int i = 0; i < 5; i++) {
uint64_t num = splitmix64();
// Младший бит (num & 1) будет вести себя как идеальная монетка
printf("Число: %llu, Младший бит: %llu\n", num, num & 1);
}
return 0;
}
Комментариев нет:
Отправить комментарий