範囲 rand()(C++)のソースコードはどうやって入手できますか?




乱数生成 アルゴリズム (5)

私はプログラミングが初めてです。

私はrand()が何をするのか正確に知りたいのです。

検索すると、その使用法に関する例しか得られません。 しかし、関数がどのように乱数を生成するかの各ステップを説明するものは誰もいません。 彼らはrand()をブラックボックスとして扱います。

rand()が何をしているのか知りたいのですが。 各ステップ

rand()が何をするのかを正確に知ることができるリソースはありますか? これはすべてオープンソースのものですね。 情報源がなければ、私は逆アセンブルを解決します。

私はそれが乱数を返すことを知っています、しかしそれはどのようにその数を生成しますか? 各ステップを見たいです。

ありがとうございました。


これがあなたが探しているものです。 ランダム関数の詳細な説明と、アルゴを理解するための簡単なCプログラムが含まれています。

編集する

これもチェックしてください。 重複する可能性があります。




最も簡単で適度に優れた疑似乱数発生器は線形合同発生器(LCG)です。 これらは、次のような式の繰り返しです。

X_{n+1} = (a * X_n  +  c) modulo m

定数a、c、およびmは、予測不能なシーケンスを与えるように選択されています。 X_0はランダムシード値です。 他にも多くのアルゴリズムが存在しますが、これで十分でしょう。

Mersenne Twisterのように、本当に良い擬似乱数ジェネレータはもっと複雑です。


そうですね、randはC ++標準ライブラリからではなく、C標準ライブラリからのものだと思います。 どちらのライブラリの実装もありません。いくつかあります。

ほとんどのLinuxディストリビューションで使用されているcライブラリであるglibcのソースコードを表示するには、 このページのどこかにアクセスしてください 。 glibcの場合は、 rand.crandom.cなどのstdlibの下のソースファイルで見つけることができます。

uClibcのような異なる実装は読みやすいかもしれません。 libc / stdlibフォルダーの下で試してください





random