0

PHP と C でアプリケーションを開発していますがrand、同じシードを使用しているにもかかわらず、2 つの言語で結果が異なります。

PHP:

srand(1);
$random = rand(); // returns 32422

子:

srand(1);
int random = rand(); // returns 41

なぜこうなった?

4

1 に答える 1

3

疑似乱数ジェネレーターを実装する方法は複数あります。

すべてのプログラミング言語は、独自のrand実装を自由に指定することも、何も指定しないこともできます。たとえば、C の仕様では、「このrand関数は 0 ~ の範囲の疑似乱数の整数のシーケンスを計算する」とだけ述べられていRAND_MAXます。どのようrandに動作するかについては言及されていないため、コンパイラの作成者はrand好きなように実装できます。

多くのコンパイラは、線形合同ジェネレータを使用して を実装しrandます。この単純なアルゴリズムにも、コンパイラが自由に指定できるパラメーターがあり、特定のシードによって与えられる数値のシーケンスを変更します。

LCG パラメータ

Borland と glibc が異なるパラメーターを使用する方法を見てください。rand一般的なすべてのプログラムは言うまでもなく、すべての C プログラムで同じように動作することさえ信頼できません!

于 2013-01-29T14:29:44.663 に答える