The "linear congruential" generator and
The "Multiply-With-Carry" generator of G. Marsaglia
#include <stdio.h>
#include <time.h>
static uint m_z = 0;
uint simple_random(a,b,m)
{
m_x = (a*m_x + b) % m;
return m_x;
}
static uint m_w = 0; /* must not be zero */
static uint m_z = 0; /* must not be zero */
void init_random()
{
time_t seconds;
seconds = time (NULL);
m_w = seconds & 0xffff;
m_z = (seconds >> 16) & 0xffff;
}
uint get_random()
{
m_z = 36969 * (m_z & 0xffff) + (m_z >> 16);
m_w = 18000 * (m_w & 0xffff) + (m_w >> 16);
return (m_z << 16) + m_w; /* 32-bit result */
}
No comments:
Post a Comment