View Single Post
  #9  
Old 03-15-2014, 09:05 PM
r00t r00t is offline
Sarnak


Join Date: Jun 2013
Posts: 330
Default

I implemented mersenne twister in pure C


PHP Code:
static const unsigned int MT_STATE_SIZE 624;

static 
unsigned int mt_state[MT_STATE_SIZE] = { };
static 
unsigned int mt_index 0;

static const 
unsigned int SEED_CONST 0x6c078965;
static const 
unsigned int EXTRACT1_CONST 0x9d2c5680;
static const 
unsigned int EXTRACT2_CONST 0xefc60000;
static const 
unsigned int GENERATE_CONST 0x9908b0df
PHP Code:
unsigned int mt_rand()
{
    if (
mt_index == 0)
    {
        for (
int i 0MT_STATE_SIZE; ++i)
        {
            
unsigned int y = (mt_state[i] & 0x80000000
                + (
mt_state[(1) % MT_STATE_SIZE && 0x7fffffff]); 

            
mt_state[i] = mt_state[(397) % MT_STATE_SIZE] ^ (>> 1);

            if (
!= 0)
                
mt_state[i] ^= GENERATE_CONST;
        }
    }

    
int y mt_state[mt_index];

    
^= (>> 11);
    
^= (<< 7) & EXTRACT1_CONST;
    
^= (<< 15) & EXTRACT2_CONST;
    
^= (>> 18);

    ++
mt_index;
    
mt_index %= MT_STATE_SIZE;

    return 
y;

PHP Code:
void seed_mt_rand(int seed)
{
    
mt_index 0;
    
mt_state[0] = seed;

    for (
unsigned int i 1MT_STATE_SIZE; ++i)
        
mt_state[i] = (SEED_CONST * (mt_state[1] ^ (mt_state[1] >> 30)) + i)) & 0xFFFFFFFF;

by freely releasing this code I could possibly be breaking a non-compete agreement so yw