[英]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
。 即使是這種簡單的算法,也具有編譯器可以自由指定的參數,並且可以更改由特定種子指定的數字順序。
看看Borland和glibc如何使用不同的參數。 您甚至不能相信rand
在所有C程序中都可以相同地工作,更不用說所有程序了!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.