如何用 C 語言生成 2,2 之間的隨機浮點數?

時間 2021-05-12 06:16:41

1樓:

把區間[a,b]上的點r線性對映到區間[x,y],用公式

(b-r)*(y-x)/(b-a)+x即可。

c語言裡面a=0,b=RAND_MAX,有的語言a=0,b=1。

2樓:Milo Yip

通常是這樣寫:

#include

/* srand(), rand(), RAND_MAX */#include

/* printf() */

#include

/* time() */

intmain

(void

)更新:

一般編譯選項不會把除數優化為乘數,因為結果會有差異,所以應該這麼寫:

#include

/* srand(), rand(), RAND_MAX */#include

/* printf() */

#include

/* time()*/

intmain

()對比第三個 printf()的運算(x86-64 gcc 8.1, -O3):

; (4.0 * rand() / RAND_MAX) - 2.0call

rand

pxor

xmm0

,xmm0

cvtsi2sd

xmm0

,eax

mulsd

xmm0

,QWORD

PTR.LC2

[rip

]; <=

divsd

xmm0

,QWORD

PTR.LC0

[rip

]; <=

subsd

xmm0

,QWORD

PTR.LC3

[rip

]; rand() * (4.0 / RAND_MAX) - 2.0call

rand

pxor

xmm0

,xmm0

cvtsi2sd

xmm0

,eax

mulsd

xmm0

,QWORD

PTR.LC2

[rip

]; <=

subsd

xmm0

,QWORD

PTR.LC3

[rip

]原本乙個乘數、乙個除數,變成只有乙個乘數。對於這個問題,此改動不影響需求,也能提公升效能。

3樓:已登出

你要隨機生成乙個在一定範圍的數,你可以在巨集定義中定義乙個random(int number)函式,然後在main()裡面直接呼叫random()函式:

例如:隨機生成10個0~100的數:

#include

#include

#define random(x) (rand()%x)

void main()

上面例子所生成的隨機數都只能是一次性的,導致你第二次執行的時候輸出結果仍和第一次一樣。如果想第二次和第一次產生不同的數值,那就要用到隨機種子,這就與srand()函式有關。srand()用來設定rand()產生隨機數時的隨機數種子。

在呼叫rand()函式產生隨機數前,必須先利用srand()設好隨機數種子, 如果未設隨機數種子, rand()在呼叫時會自動設隨機數種子為1。上面的例子就是因為沒有設定隨機數種子,每次隨機數種子都自動設成相同值 ,進而導致rand()所產生的隨機數值都一樣。

srand()函式定義 :

void srand (unsigned int seed);

例如:#include

#include

#include

#define random(x) (rand()%x)

void main()

這樣兩次執行的結果就會不一樣了!!

用time(0)的話,要加入標頭檔案#include

擴充:x = rand()%11; /*產生1~10之間的隨機整數*/

y = rand()%51 - 25; /*產生-25 ~ 25之間的隨機整數*/

z = ((double)rand()/RAND_MAX)*(b-a) + a;/*產生區間[a,b]上的隨機數*/

(內容摘錄自CDSN部落格)

c語言如何生成隨機不重複的幾個數?

涇渭漳淮 如果你只是想獲得幾個或者幾十個隨機數,那最簡單的辦法就OK,拿個陣列把每次產生的隨機數存一下,然後產生新的隨機數之後查詢一下看看是不是重複了就行。如果你想獲得幾k甚至幾兆的隨機數,那查詢就變成了瓶頸,你需要換乙個查詢的方法,紅黑樹字典樹之類的都可以。如果你想獲得幾百兆甚至幾G個不重複的隨機...

C 如何生成不重複大隨機數?

悽臨雨 設計一種一一對映的函式f x 0 21億一一對映到0 21億 然後取前n個x,然後f 隨機種子 1 f 隨機種子 n 就是你要的前n個不相同的隨機數。至於如何產生這樣的函式?我們知道十進位制是A 10000 B 1000 E 1。對位的順序做交換 交換D和E,會變成00,10,20,30,9...

這種題用 C 語言除了用生成隨機數暴力猜答案之外,還能怎麼算?

Richard Xu 既然 靈劍 提到了 逼格 我初三的時候機緣巧合參加了NOIWC 09 當年的最後一題 優化設計 參見這裡 所以題主的這個問題其實就可以寫成45個布林變數 x12,x13,x110,x23,x910 然後用5個布林表示式來保證上述5個式子成立,再來10個布林表示式來保證每個數字不...