回答
嘗試:
int iRand = 1 + rand() % 9;
它的工作原理,採取了隨機數從0到8,然後添加一個到它(雖然我以相反的順序寫的那些操作在代碼中 - 你首先回到個人偏好)。
請注意,%
的優先級高於+
,所以括號不是必需的(但可能會提高可讀性)。
如何
int iRand = (rand() % 9) + 1;
DOH按秒
好打,你知道如何獲得一個隨機整數範圍在[0,X],對不對?這就是:
rand() % (x + 1)
在你的情況,你已經設置x到9,給你rand() % 10
。那麼如何操縱範圍達到1-9?那麼,既然0走出這個隨機數發生器方案的最小值,我們知道我們需要添加一個有最少一個:
rand() % (x + 1) + 1
現在你得到的範圍[1,X + 1]。如果我們假設爲[1,9],則x必須是8,贈送:
rand() % 9 + 1
這就是你應該如何看待這些事情。
你沒事:) – Ilyssis 2011-01-06 23:51:55
初始化隨機數發生器呼叫srand(time(0));
然後,向整數x
設置爲一個值low
(含)和high
之間(不包括):
int x = int(floor(rand()/(RAND_MAX + 1.0) * (high-low) + low));
的floor()
是不必要的,如果高和低的兩者都是非負面的。
對於隨機數使用模數(%
)是不可取的,因爲您不會在低位中獲得很大的變化,所以您會發現分佈非常微弱。
無論答案是否摘下,基於模的範圍都是有偏見的。你可以在互聯網上找到。所以,如果你真的關心這個,那麼你必須做更多的比(假設arc4random()返回一個4字節的整數):
#define NUMBER 9.0
#define RANDOM() (((int)(arc4random()/(float)0xffffffff * (float)NUMBER) + 1) % (NUMBER + 1))
我把它留給你,因爲你的聲音找出正確的語法像一個非常有能力的開發者
我的情況我不需要隨機數的均勻分佈。但是,謝謝你的提示......; ) – Ilyssis 2011-01-07 10:08:15
- 1. C#隨機數
- 2. 隨機數C
- 3. C#隨機數是不是「隨機」
- 4. Objective C隨機數
- 5. Objective C隨機數
- 6. Cplex隨機數(C++)
- 7. C++的隨機數
- 8. C++隨機數函數srand
- 9. C#猜測隨機數
- 10. c#發現隨機數
- 11. C中的長隨機數
- 12. 隨機數,C++ 11與Boost
- 13. C中的隨機數字#
- 14. 隨機數Objective-C(linux)
- 15. C - 生成隨機數
- 16. 4位隨機數C++
- 17. c#概率和隨機數
- 18. 幾個隨機數C++
- 19. 隨機數(0,1)在C
- 20. C中的隨機數字
- 21. C++隨機int函數
- 22. C - 矩陣,隨機數
- 23. C++宏中的隨機數
- 24. C++ 11個隨機數
- 25. 隨機數發生器,C++
- 26. C#隨機數問題
- 27. C++中的隨機函數
- 28. c#獨特的隨機數
- 29. 分配隨機數字c#
- 30. C++生成隨機數-1
好的,我很年輕,需要的時間... – Ilyssis 2013-01-31 12:56:34