可能性の重複:Cライブラリ内で定義された関数randでどのように
What common algorithms are used for C's rand()?RAND関数
。 rand関数の時間の複雑さは?誰かがrand関数のソースコードを提供できる場合(私はその実装は必要ないがソースコード)、それは素晴らしいものになるだろう。 Thanx
可能性の重複:Cライブラリ内で定義された関数randでどのように
What common algorithms are used for C's rand()?RAND関数
。 rand関数の時間の複雑さは?誰かがrand関数のソースコードを提供できる場合(私はその実装は必要ないがソースコード)、それは素晴らしいものになるだろう。 Thanx
これは実装定義のため、各ライブラリの作成者は自由に実装できます。しかし、通常はlinear congruential generatorsに基づいていますが、これはやや制限されています。 POSIX標準はexample implementationを与える:
static unsigned long next = 1;
/* RAND_MAX assumed to be 32767 */
int myrand(void) {
next = next * 1103515245 + 12345;
return((unsigned)(next/65536) % 32768);
}
void mysrand(unsigned seed) {
next = seed;
}
私はあなたがここで「時間計算」によって何を意味するかわからないんだけど。 「時間の複雑さ」とは、通常、実行時間がn
(ここで、n
は入力のサイズなど)に関してどのように変化するかを指します。
時間の複雑さは、乱数が必要な範囲(つまり、上限と下限)によって決まります。 – Prateek
@PRATEEKSULTANIA: 'rand()'では、境界を指定することができません。 –
それは(1)の複雑さ、入力がなく、int
を返します。 http://www.jbox.dk/sanos/source/lib/stdlib.c.htmlから
:
int rand()
{
return (((holdrand = holdrand * 214013L + 2531011L) >> 16) & 0x7fff);
}
は、あなたも自分で答えを見つけようとしましたか?私がgoogle "c rand"の最初のヒットは[このような質問です](http://stackoverflow.com/questions/1026327/what-common-algorithms-are-used-for-cs-rand)です。 – eaj
ソースコードは、Cコンパイラに含まれているランタイムライブラリに使用できるようにする必要があります。あなたはそれをチェックしましたか?これは、Oliほど賢明な人があなたにいくつかの一般的なガイドラインや推測された推測を与えることができても、実装に依存しています。 –