deba@2035: #ifdef WIN32 deba@2035: deba@2035: #include deba@2035: deba@2035: deba@2035: static unsigned short _mingw_rand_state[10]; deba@2035: deba@2035: void _mingw_rand_next_state(unsigned short xsubi[3]) { deba@2035: _mingw_rand_state[8] = _mingw_rand_state[9] = 0; deba@2035: _mingw_rand_state[7] = _mingw_rand_state[6]; deba@2035: for (int i = 0; i < 3; ++i) { deba@2035: unsigned long val = 0; deba@2035: for (int j = 0; i + j < 3; ++j) { deba@2035: val += (unsigned long)_mingw_rand_state[7 + i + j] deba@2035: + (unsigned long)xsubi[i] * (unsigned long)_mingw_rand_state[3 + j]; deba@2035: _mingw_rand_state[7 + i + j] = val; deba@2035: val >>= 16; deba@2035: } deba@2035: } deba@2035: xsubi[0] = _mingw_rand_state[6]; deba@2035: xsubi[1] = _mingw_rand_state[7]; deba@2035: xsubi[2] = _mingw_rand_state[8]; deba@2035: } deba@2035: deba@2035: long int lrand48(void) { deba@2035: return nrand48(_mingw_rand_state); deba@2035: } deba@2035: deba@2035: long int nrand48(unsigned short xsubi[3]) { deba@2035: _mingw_rand_next_state(xsubi); deba@2035: return ((long)(xsubi[2] & ( (1 << 15) - 1) ) << 16) | (long)xsubi[1]; deba@2035: } deba@2035: deba@2035: double drand48(void) { deba@2035: return erand48(_mingw_rand_state); deba@2035: } deba@2035: deba@2035: double erand48(unsigned short xsubi[3]) { deba@2035: return (double)nrand48(xsubi) / (1 << 31); deba@2035: } deba@2035: deba@2035: deba@2035: long int mrand48(void) { deba@2035: return jrand48(_mingw_rand_state); deba@2035: } deba@2035: deba@2035: long int jrand48(unsigned short xsubi[3]) { deba@2035: _mingw_rand_next_state(xsubi); deba@2035: return ((long)xsubi[2] << 16) | (long)xsubi[1]; deba@2035: } deba@2035: deba@2035: void srand48(long int seedval) { deba@2035: _mingw_rand_state[0] = 0x330E; deba@2035: _mingw_rand_state[1] = seedval & ( (1 << 16) - 1); deba@2035: _mingw_rand_state[2] = seedval >> 16; deba@2035: _mingw_rand_state[3] = 0xE66D; deba@2035: _mingw_rand_state[4] = 0xDEEC; deba@2035: _mingw_rand_state[5] = 0x0005; deba@2035: _mingw_rand_state[6] = 0x000B; deba@2035: } deba@2035: deba@2035: unsigned short *seed48(unsigned short seed16v[3]) { deba@2035: _mingw_rand_state[7] = _mingw_rand_state[0]; deba@2035: _mingw_rand_state[8] = _mingw_rand_state[1]; deba@2035: _mingw_rand_state[9] = _mingw_rand_state[2]; deba@2035: _mingw_rand_state[0] = seed16v[0]; deba@2035: _mingw_rand_state[1] = seed16v[1]; deba@2035: _mingw_rand_state[2] = seed16v[2]; deba@2035: return _mingw_rand_state + 7; deba@2035: } deba@2035: deba@2035: void lcong48(unsigned short param[7]) { deba@2035: _mingw_rand_state[0] = param[0]; deba@2035: _mingw_rand_state[1] = param[1]; deba@2035: _mingw_rand_state[2] = param[2]; deba@2035: _mingw_rand_state[3] = param[3]; deba@2035: _mingw_rand_state[4] = param[4]; deba@2035: _mingw_rand_state[5] = param[5]; deba@2035: _mingw_rand_state[6] = param[6]; deba@2035: } deba@2035: deba@2035: deba@2035: #endif