VUにおける乱数生成アルゴリズムにはM系列乱数が利用されていることは
PS2 Linux付属のマニュアルに書いてありますが、
具体的な生成アルゴリズムまでは書いてありません。
ここでは、具体的な計算方法を提示します。
VUの場合、ガロア体 GF(223) における原始多項式 x23 + x5 + 1 を用いて
以下の様に乱数生成がされています。
Rレジスタは乱数の種であり、rinitで設定します。
乱数を生成するrnextは次のプログラムと同等です。
int rnext() { int x = (R >> 4) & 1; int y = (R >> 22) & 1; R <<= 1; R ^= x ^ y; R &= 0x7fffff; //23bit分 return R; }これはRレジスタの23bit部分の乱数です。