簡體   English   中英

以相同方式播種的rand()產生不同的結果

[英]rand() seeded the same way generates different results

我正在用PHP和C開發應用程序,但是即使使用相同的種子,兩種語言之間rand的結果也不同:

PHP:

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

C:

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

為什么會這樣呢?

實現偽隨機數生成器有多種方法。

每種編程語言都可以自由指定其自己的rand實現,甚至不指定任何內容。 例如,C規范僅說“ rand函數計算范圍為0到RAND_MAX的偽隨機整數序列”。 沒有提到rand應該如何工作,因此編譯器作者可以按自己的rand實現rand

許多編譯器使用線性同余生成器來實現rand 即使是這種簡單的算法,也具有編譯器可以自由指定的參數,並且可以更改由特定種子指定的數字順序。

LCG參數

看看Borland和glibc如何使用不同的參數。 您甚至不能相信rand在所有C程序中都可以相同地工作,更不用說所有程序了!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM