#include<stdlib>
#include<time>
using namespace std;
srand((unsigned)time(0));
int n=(rand()>>8)%4;
が、他のランダムな機能がある、または他のどのような機能が乱数発生器として使用することができるものを使用しましたか?
編集:私は本当にこの質問をする特別な理由はありません。私はC++に他のランダム関数があるかどうかを知りたいと思っていました。
#include<stdlib>
#include<time>
using namespace std;
srand((unsigned)time(0));
int n=(rand()>>8)%4;
が、他のランダムな機能がある、または他のどのような機能が乱数発生器として使用することができるものを使用しましたか?
編集:私は本当にこの質問をする特別な理由はありません。私はC++に他のランダム関数があるかどうかを知りたいと思っていました。
ランド()とsrand関数()関数は、すべてのC++標準で指定されています。そして、それはあなた自身を書くことになれば、どのようなジョン・フォン・ノイマンが言ったのことに注意してください。「乱数を生成する算術 方法を考えて誰もが罪の状態で当然の ある」
時間は通常、実行するのが安価な最もランダムな操作ですが、予測することはまだ可能です。
真のランダム性が必要な場合は、何らかの外部入力を使用することが唯一の解決策です。
Quantum Random Bit Generatorは、このようなデータを提供する1つのサービスです。
時間はすべてランダムではありません。私はオンラインギャンブルソフトウェアを一度書いたが、時間ベースのランダムジェネレータを使って対処するカードを決めることはできなかった。明らかに、あなたが扱っている手に基づいて、サーバが何時に実行されているかをほぼ推測するのは簡単です。 – rein
真。私はその行を削除します。 –
ランダムは、均一な分布であなたに良い乱数を与え、それでかなり良い仕事をします。
それ以外の場合は、実際に配布を歪めたいということです。
たとえば、MicrosoftのGUIDジェネレータを使用すると、繰り返しにくいランダムIDが与えられ、時間やコンピュータなどのことが考慮されます。
GUIDはランダムではありません –
彼は、暗号化された安全な機能を求めていると思います。質問はあまり明確ではありません。 – Zifre
@Uri Amd「Random give you ...」で参照しているこの「Random」は何ですか? –
int unixrand()
{
int x;
int f = open("/dev/random", O_RDONLY);
if (f < 0) return -1; /* Error */
if (sizeof(x) != read(f, &x, sizeof(x))) {
close(f);
return -1;
}
close(f);
if (x < 0) x = ~x;
return x;
}
(answer I just wroteから同様の質問へのクロス投稿)
ISAAC(間接、シフト、累積、加算、およびカウント)をご覧ください。一様に分布し、平均サイクル長は2^8295です。
それは乗算または法を必要としないので、高速です。
ブルース・シュナイアとジョン・ケルシーは、a random number generatorと書いています。むしろ、それはシードジェネレータです。 Yarrowはもはやサポートされていませんが、エントロピーがどのように集まるのか興味があります。
OpenSSL has an APIアクセスが比較的簡単で可搬性に優れています。 Mozillaにはa decent API that wraps whatever the OS offersが付属しています。
個人的には、私は一般的にBoost.Randomを使用していますが、これは既に提案されています。
質問をより明確にしてください。あなたは暗号的に安全(予測が難しい)または良い分布を意味しますか? – Zifre