私はrgbaの浮動小数点乱数ジェネレータに出くわした:説明が明確であり、コードはシンプルですこのコードで乱数を生成する場所はどこですか?
http://rgba.org/articles/sfrand/sfrand.htm
。 1つの問題があります。ランダムなビットがどこから来るのか分かりません。以下のコードは、スニペット:
static unsigned int mirand = 1;
float sfrand(void)
{
unsigned int a;
mirand *= 16807;
a = (mirand&0x007fffff) | 0x40000000;
return(*((float*)&a) - 3.0f);
}
を私はcompile this functionしようと常にmirand
が1
として始まる場合は理にかなって-0.995993
の結果を、手に入れました。何が欠けているのですか、またはmirand
は単に種ですか?
必ずしも同じ番号を返すとは限りません。行を何度も呼び出すと、毎回異なる番号が返されることがわかります。もちろん、プログラムを実行するたびにシーケンスが同一になります。 – Gabe
@Gabe:最初はcodepad.org、ideone.com、自分のマシンでコンパイルしました。私はideone.comを除いて '-0.995993'を得ました。私は' -3'を与えました(そして間違っています)。私はこの機能を何度も実行しました。@ aleph_nullの答えは、私が使用の意図を理解する助けになりました。 –
ループ内で関数を実行すると毎回同じ結果が得られると言っていますか? – Gabe