Changeset 533 for trunk/src/core/random.cc
- Timestamp:
- 01/12/17 13:16:48 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/core/random.cc
r509 r533 16 16 static const uint32 mt_matrix_a = 0x9908B0DFUL; 17 17 18 #define NV_MT_MIXBITS(u, v) ( ( (u) & mt_upper_mask) |( (v) & mt_lower_mask) )19 #define NV_MT_TWIST(u, v) ( (NV_MT_MIXBITS(u, v) >> 1) ^ ( (v) & 1UL ? mt_matrix_a : 0UL) )18 #define NV_MT_MIXBITS(u, v) ( uint32( (u) & mt_upper_mask) | uint32( (v) & mt_lower_mask) ) 19 #define NV_MT_TWIST(u, v) ( uint32(NV_MT_MIXBITS(u, v) >> uint32(1)) ^ uint32( (v) & uint32(1) ? mt_matrix_a : uint32(0)) ) 20 20 21 21 nv::random& random::get() … … 43 43 { 44 44 uint32 *p = m_state; 45 46 for ( int count = ( mersenne_n - mersenne_m + 1 ); --count; p++ ) 45 constexpr int m = mersenne_m; 46 constexpr int n = mersenne_n; 47 48 for ( int count = ( n - m + 1 ); --count; p++ ) 47 49 *p = p[mersenne_m] ^ NV_MT_TWIST( p[0], p[1] ); 48 50 49 51 for ( int count = mersenne_m; --count; p++ ) 50 *p = p[mersenne_m - mersenne_n] ^ NV_MT_TWIST( p[0], p[1] ); 51 52 *p = p[mersenne_m - mersenne_n] ^ NV_MT_TWIST( p[0], m_state[0] ); 52 { 53 *p = p[m - n] ^ NV_MT_TWIST( p[0], p[1] ); 54 } 55 56 *p = p[m - n] ^ NV_MT_TWIST( p[0], m_state[0] ); 53 57 54 58 m_remaining = mersenne_n;
Note: See TracChangeset
for help on using the changeset viewer.