/
githubmirror
/
numactl
Обзор
Документация
Войти
/
githubmirror
/
numactl
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
v2.0.13
mt.c
46 строк
1 KB
Filipe Brandenburger
Cleanup whitespace from *.c and *.h files
15 июн 2018, 23:39
15 июн 2018, 23:39
8a2311a
Код
Авторство
О чём код?
/* Mersenne twister implementation from Michael Brundage. Public Domain. MT is a very fast pseudo random number generator. This version works on 32bit words. Changes by AK. */ #include <stdlib.h> #include "mt.h" int mt_index; unsigned int mt_buffer[MT_LEN]; void mt_init(void) { int i; srand(1); for (i = 0; i < MT_LEN; i++) mt_buffer[i] = rand(); mt_index = 0; } #define MT_IA 397 #define MT_IB (MT_LEN - MT_IA) #define UPPER_MASK 0x80000000 #define LOWER_MASK 0x7FFFFFFF #define MATRIX_A 0x9908B0DF #define TWIST(b,i,j) ((b)[i] & UPPER_MASK) | ((b)[j] & LOWER_MASK) #define MAGIC(s) (((s)&1)*MATRIX_A) void mt_refill(void) { int i; unsigned int s; unsigned int * b = mt_buffer; mt_index = 0; i = 0; for (; i < MT_IB; i++) { s = TWIST(b, i, i+1); b[i] = b[i + MT_IA] ^ (s >> 1) ^ MAGIC(s); } for (; i < MT_LEN-1; i++) { s = TWIST(b, i, i+1); b[i] = b[i - MT_IB] ^ (s >> 1) ^ MAGIC(s); } s = TWIST(b, MT_LEN-1, 0); b[MT_LEN-1] = b[MT_IA-1] ^ (s >> 1) ^ MAGIC(s); }