阿賢在上一篇裡簡單的介紹如何起始srand()及使用rand()函數,接下來要說說如何從基本函數rand()變化出最常使用的兩種「固定範圍均勻亂數」。
[1.] 產生 0.0 <= frand() < 1.0 的浮點數亂數( frand()為自訂函數 )
frand = rand()/((float)RAND_MAX+1),或
frand = rand()/((double)RAND_MAX+1)
[2.] 產生 0 <= random(n) <= n 的整數亂數( random(n)為自訂函數 )
random = rand()%(n+1),或是使用frand()
random = (int)(frand()*(n+1))
有了上面兩種基本型後,就能用來做進一步的變化:
[s1] 產生 a <= k <= b 的整數亂數:
k = a + random(b-a),或是直接展開
k = a + rand()%(b-a+1)
k = a + (int)(frand()*(b-a+1))
[s2] 產生 a <= f < b 的浮點數亂數:f = a + frand() * (b-a)。
[s3] 產生 -a <= f < a 的浮點數亂數:f = a * ( frand() * 2 - 1 )。
兩種基本型加上三種衍生型,就能應付大多"固定範圍內均勻亂數"的case。下面阿賢用幾個經典的亂數題目示範亂數用法。
一、蒙地卡羅法(Monte Carlo Method)求圓周率
二、產生不重複樂透號碼
第一次使用亂數就上手-目錄for C語言:
第一次使用亂數就上手 - 1. 即用篇for C
第一次使用亂數就上手 - 2. 基本篇for C
基本篇範例一:蒙地卡羅法(Monte Carlo Method)求圓周率
基本篇範例二:產生不重複樂透號碼
第一次使用亂數就上手 - 3. 推廣篇for C
產生常態分布亂數
RAND_MAX的試煉:原理x限制x修正
第一次使用亂數就上手 - 4. 原理篇for C
第一次使用亂數就上手 - 5. 基本篇for C
留言列表