2014-10-18 57 views
-1

我想生成0和1之間的隨機數(包括0和1),但小數點後只有3個分數,如下所示:如何生成[0,1]和3分數之間的隨機數

0.000, 0.214, 0.523, 0.451, 0.102, 1.000 

小數點後三位的目的不適用於打印。我想實施蒙特卡羅技術來獲得PI的價值。所以這是爲if聲明。因此,我希望將隨機值分配給一個變量是這樣的:

double x = 0.241; 
+0

他們是否有均勻分散式?簡單地說,你可以使用rand()來產生100和999之間的隨機數,併除以1000.取決於這個(差)的隨機性對你來說是否足夠。 – 2014-10-18 22:18:21

+0

被警告'double'不能*只存儲* 3個小數的所有分數。爲什麼不使用整數並避免你似乎試圖解決的問題? (因爲它提示[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。) – usr2564301 2014-10-18 22:34:43

+0

您可以將限制設置爲0 ... 1000 ,然後將結果除以1000得到0.000到1.000的範圍 – user3629249 2014-10-18 23:16:40

回答

1

可以生成0和1000之間的隨機整數,並將其劃分爲1000

以下C代碼生成期望的隨機值

#include <time.h> 
#include <stdlib.h> 

srand(time(NULL)); 
double r = (double)(rand()%1001)/1000; 
+0

總而言之,我想爲循環做上百萬次並計算產生了多少1.0的值。所以我想要三個分數來增加出現1.0的機會。 – Nano 2014-10-18 22:58:04

+0

請注意,由於RAND_MAX不能被1001整除,因此會導致模偏差。它不會很大,但它會在那裏。 – pjs 2014-10-18 23:01:29

-1

使用隨機函數來calculare 0和1000之間的隨機數,然後將其劃分爲1000 注意的是,當你使用時間功能來生成隨機數,你會得到相同的數,直到PC時鐘有同樣的v ALUE 例如:

11:20:20 PM > generate random number: 10 
11:20:20 PM > generate random number: 10 
11:20:20 PM > generate random number: 10 
11:20:21 PM > generate random number: 989 

所以,每秒產生一個數字或者找一些黑客(你可以用谷歌輕鬆找到它,一個地段上計算器的答案已經給出)

相關問題