2014-11-04 75 views
-2

我正試圖用給定概率的最大值生成一個隨機概率。我們怎麼能在C中產生0到0.5之間的隨機實數值?如何在C中生成一個真正的隨機數?

+1

我會建議編寫的代碼生成0和1之間的值,然後將其限制爲0.5。 – 2014-11-04 18:23:56

+1

這是一個關於這個問題的好視頻:http://channel9.msdn.com/Events/GoingNative/2013/rand-Considered-Harmful – francis 2014-11-04 18:23:57

+0

只用C?你不能。你可以做的最好的事情是從熵源中讀取一個真正的隨機值,並從物理世界獲得熵。 – datenwolf 2014-11-04 18:24:40

回答

2

您不能在便攜式C99中生成真的隨機數。但是你可以使用一些PRNG(也許在當前時間播種)。

而電腦並不知道真正的真實數字。只有浮點。看到http://floating-point-gui.de/

其實我相信宇宙不知道實數(想想一些基數的論點類似於Cantor's diagonal argument)。但問問物理學家或哲學家。

某些操作系統或實現具有PRNG,並且一些系統(包括)硬件甚至具有真正的隨機生成器。

閱讀關於random(3) & drand48(3)如果您的系統有它的話。如果在Linux上,也看到random(4)

你可以嘗試

double my_random_number /* between 0 & 0.5 */ = drand48() * 0.5; 

產生一個幾乎均勻分佈的隨機數> = 0和< 0.5

參見C++11標準的頭,如果你接受代碼<random>在C++ ...

+1

實際上,Windows上的Unix-like框和'CryptGenRandom'上的'/ dev/random'可能很好地從許多現代計算機上基於硬件的隨機數生成器獲得熵,因此可能是真正隨機的,不僅僅是算法上的僞-隨機。 – 2014-11-04 18:34:49

+0

我沒有在第二段中提到過。隨機(4)'告訴它。 – 2014-11-04 18:36:25

+3

我認爲他在數學意義上使用「真實」 http://en.wikipedia.org/wiki/Real_number而不是「真正」的「真正的」意義:http://en.wikipedia.org/wiki/Random_number_generation#.22True.22_random_numbers_vs._pseudo-random_numbers雖然很好的答案,但。 – DavidO 2014-11-04 18:36:29