2011-03-25 61 views
0

我需要生成一個隨機數,現在這個數字需要在10到120秒之間。 現在,在C中我可以使用隨機來實現這一點,但我沒有訪問該功能。 爲了努力嘗試並且聰明,我確定了一些隨機數據,我可以使用無線掃描功能(這個隨機數實際上最終是需要的),它爲我提供了每個檢測到的Wi-Fi信號的信號強度。隨機數生成 - ARM7上的C

使用這個我認爲我可以創建一個不錯的隨機數,但顯然這給了一個非常大的總和,需要縮小一些 - 這減少了不同隨機數之間的電位差。

該隨機數將用作試圖互相連接的不同無線設備的退避定時器,並且顯然是隨機的數字,因爲我可以實現更好的效果。

有什麼想法?也許有一個更簡單的方法來實現這一目標? 感謝您的任何提示。

編輯:使郵件可讀!

+2

您可以通過縮放大量下降:'(bignumber%111)+ 10' – 2011-03-25 19:44:37

+0

不完全是一回事,但閱讀本http://stackoverflow.com/questions/137783/expand-a-random-range -from-1-5-to-1-7/891304#891304 – pmg 2011-03-25 19:51:31

+0

你可以用'&0x7F'開始獲得你關心的位數,然後使用@Gavin的方法。根據你真正需要的範圍,你可能甚至不需要做mod。 – nmichaels 2011-03-25 19:52:08

回答

2

對所有信號強度應用XOR並將其轉換爲整數或任何您需要的值。

可替代地,這或多或少是如何rand()在C定義:

static unsigned int next = 1; 

int rand_r(unsigned int *seed) 
{ 
     *seed = *seed * 1103515245 + 12345; 
     return (*seed % ((unsigned int)RAND_MAX + 1)); 
} 

int rand(void) 
{ 
     return (rand_r(&next)); 
} 

void srand(unsigned int seed) 
{ 
     next = seed; 
} 
+0

謝謝!完美地完成工作 – Draineh 2011-03-25 21:27:55

0

標準庫函數是rand(),不Random();你爲什麼不能使用它?對於所有潛在的缺陷,它可能足夠用於退避計時器,因爲開始時間本身是由碰撞隨機化的,並且是其他設備的異步操作。

人們可能會對這個函數的缺陷表示抒情,並且更多地使用樸素模運算的返回值,但它是關於適合目標和適當性的,並且rand()不僅適用於這個案例。