このコードのどこで乱数を生成しますか?

私は 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 );
}

rel=”nofollow”>この機能をコンパイルして、常に
-0.995993 という結果を得ました。 mirand
1 として始まるかどうかを判断します。私は何が欠けているのか、シードだけで
mirand ですか?

ベストアンサー

真実は、そのコードは乱数を生成しません…それは疑似ランダムの数を生成します。あなたが同じ種から始めると仮定すると、何が起きているのか想像する素人の方法は、あなたが巨大な数の乱数のリストを調べているだけです。結局のところ、数字は繰り返されますが、良い公式はこの繰り返しを大きな間隔で行うものです。

To clarify, take a look at the rand formula that Excel uses:
http://support.microsoft.com/kb/828795

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です