2016-12-04 97 views
-2

我想實現機能的研究產生隨機二進制數,使用以下:如何在C++中生成隨機二進制數字?

srand(time(NULL)); 
int S = rand() % 2;//continuous random variable between 0 and 1 

然後:

rand()%2; 

不斷叫2^20倍......然而 即時通訊沒有得到適當的隨機數字..任何改進建議?

是否有二進制數字或eqv的數據類型? (而不是聲明一個整數)

另外,我見過的srand種子的唯一實現是時間(NULL)或時間(0),有沒有辦法操縱種子以獲得更好的隨機數?

+1

您可能希望將標籤的「C++」或「c」添加到你的問題,因爲我認爲這就是你的代碼在。 –

+0

你認爲什麼是「正確的隨機數」?你得到什麼樣的結果? – JJJ

+1

使用'rand()%2;'只挑選剛生成的隨機數的低位。一些PRNG會以低位產生模式,這可能是導致問題的原因。通過使用像'if(rand()%10000> = 5000)...'這樣的更好的方法避免了這個問題,它使用PRNG輸出的更多位。 – rossum

回答

-1

二進制數字只是不同基數中的數字。如果您只是生成整數(基數爲10),然後在輸出時將其轉換爲二進制,則不存在任何問題。

檢查這個問題的詳細信息上一個整數轉換爲「二進制」字符串: C++ - Decimal to binary converting

+0

這是不正確的,因爲依賴於正在使用的PRNG。許多PRNG在整數級表現得足夠好,但在各個位上性能很差。特別是,rand()的許多實現(最後一次沒有確切的說法)都知道低位的性能很差。 – pjs

+0

不知道,思想數字總是一樣的。儘管如此,看看你的意思! –