drstrip

Question about Mersenne Twister sample

Discussion created by drstrip on Dec 1, 2009
Latest reply on Dec 1, 2009 by genaganna

The brook code (mersenne_twister.br) contains the following set of lines, repeated for each output stream A1 ... A8 -

    A1.x = a.x ^ e.x ^ ((b.x >> thirteen) & mask11) ^ f.x ^ (r2.x << fifteen);
    A1.y = a.y ^ e.y ^ ((b.y >> thirteen) & mask12) ^ f.y ^ (r2.y << fifteen);
    A1.z = a.z ^ e.z ^ ((b.z >> thirteen) & mask13) ^ f.z ^ (r2.z << fifteen);
    A1.w = a.w ^ e.w ^ ((b.w >> thirteen) & mask14) ^ f.w ^ (r2.w << fifteen);

where mask11, mask12, mask13 are unsigned ints. Why can't this be written

A1 = a ^e^((b >> thirteen) & mask) ^f^(r2<< fifteen);

where thirteen is now uint4(13U, 13U, 13U, 13U),

mask = uint4(mask11, mask12, mask13, mask14) and

fifteen is now uint4(15U, 15U, 15U, 15U).

Am I missing an efficiency issue, or even worse, are they not equivalent?

Outcomes