4

ランダムな unsigned __int64 値を生成しようとして問題が発生しています。誰かがこのようなことを行うための迅速かつ効果的な方法を持っていますか? 以下は私がやっていることです。以下のコードを確認してください。

unsigned __int64 m_RandomKey = 0;

while(m_RandomKey == 0)
{
    m_RandomKey = (unsigned __int64) rand() << 32 | rand();
}

unsigned __int64 キーを生成する最良の方法は何ですか? しばらくしてから、またはまったく同じキーを取得するのが難しくなりますか? 18,446,744,073,709,551,615 分の 1 の確率で再実行されない限り、一意である必要はありません。

4

2 に答える 2

0

あなたの方法は高速で、移植性があり、十分に優れていると思います。ランダムシードを適切に初期化する限り、これは非常にうまく機能するはずです。Rand() は完全な均一分布ではないかもしれませんが、かなり近いものです。

以下で @Pete が言及しているように、Rand() は確実に 16 ビットの数値でのみ機能するため、真の移植性のためにはもう少し複雑な式の方が適している可能性があります: m_RandomKey = (unsigned __int64)( (rand() << 48) | (rand () << 32) | (ランド () << 16) |ランド ());

それでも速く、間違いなく優れています。

于 2013-05-06T20:39:48.253 に答える