2009-07-29 9 views

答えて

8

qrandはだけなので、整数にフィット限り多くのユニークな番号を生成することができます - あなたが一意に数えることができない - 何でも実装。

また、異なる種が異なるランダムな整数を効果的にランダムもうqrandないなり予測のレベルを生じる生成することを知ります。

編集:私は漫画を投稿してあなたを楽しませるつもりはないと誓っています。さQt Documentationによると、QRand)は、標準のrand(のちょうどスレッドセーフバージョンである

alt text http://www.dilbert.com/dyn/str_strip/000000000/00000000/0000000/000000/00000/2000/300/2318/2318.strip.gif

+0

Qtのドキュメントはqrand()は、プログラムの実行中の異なる時点で呼び出された場合、それはユニークな番号を生成しますqrand()は0とRAND_MAXの間の値を返すと言いますか。? -ありがとうございます。 –

+2

No.必要ではありません。 – balpha

+0

qrandは疑似ランダムジェネレータに過ぎません。値が一意であるという保証はありません。あなたは自分自身を確実にする必要があります。生成された数を1組に格納する。 – nos

0

、私が使用方法を想定していないでしょう。私は、これが問題の非常に良い説明だと思いますその記述に基づいてrand()のものよりも安全で優れています。

私はあなたが(ない擬乱数発生器は、入力X意志常に農産物出力Yとして、ユニークストリームを生成しません)「ユニークな」乱数とは異なる用語を使用する必要があると思います。 実際にはの状況は何ですか?

+0

サーバプロセスが実行中で、クライアントが接続するときにセッションIDとして一意のランダム値を割り当てたいとしました。 –

+0

ああ...あなたが今何を望んでいるのか分かります。 qrand()* alone *は動作しませんが、以前に割り当てられた(アクティブな)セッションIDのテーブルに加えて、qrand()を使用して値をクライアントに送信する前に一意であることを確認できます。あなたのニーズに応じて、それで十分かもしれません。しかし、qrand()の代わりに、Linuxで/ dev/urandomから読み込むなどの代替PRNGを調べることもできます。 – Kitsune

6

はあなたのセッションIDを保存する方法に応じて、あなたは(ほとんど)UUIDを使用して一意の識別子を保証生成することができます。 QUuidのドキュメントを参照してください。これにも注意してください(太字)。

createUuid()も使用できます。 createUuid()によって生成されたUUIDはランダムタイプです。彼らのQUuid::VersionビットはQUuid::Randomに設定され、そのQUuid::VariantビットがQUuid::DCEに設定されています。残りのUUIDは乱数で構成されています。 理論的には、これは、createUuid()によって生成されたUUIDが一意ではない可能性がわずかにあることを意味します。しかし、それは非常に小さなチャンスです。

私はあなたが同様のlibuuidか何かに見て、彼らは一意である必要がないので、もし、それらの生成のUUIDは、必ずしも一意ではないだろうということを保証することができます。

関連する問題