понедельник, 20 июля 2026 г.

Rand64

 #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;

}


Комментариев нет:

Отправить комментарий