《OSS首頁》《文章分類列表》《Base》《Calc》《Draw》《Impress》《Writer》
OpenOffice / LibreOffice提供了兩了製造亂數的函數:rand() 及 randbetween(起始值 ; 終止值)。一般基於使用上的方便,通常會使用randbetween這個函數,來產生隨機亂數。例如:要在1-49間,一次取六個隨機亂數,可能會在A1到A6,這六個儲存格內使用相同的函數 =randbetween(1;49),這會的用法,最大的問題是:產生的六個數字,重複的機率很大。
要如何產生不重複的隨機亂數呢?
先講答案:要透過內建的函數來組合拼湊出1-49中不重複的六個隨機亂數,是一個難度極高的挑戰,一般會建議使用巨集語言來處理,但是使用巨集的門檻,相對上是較難的,不容易被大部分的使用者接受。基於上述的理由,我想出了一個折衷的辦法,就是:那就製造幾乎不可能重複的六個數字吧!
使用Calc內建函數,在1-49間,產生重複機率只有百兆分之49的六個數字:
- 在A1到A49,依序複製塞入1-49,這些數字。沒有特別的目的,只是要當做項次來辨識。
- 在B1到B49,全部使用公式: =rand()。
rand這個函數會任意製造介於0~1之間的一個小數,Calc可以接受小數點以下20位的小數,但以rand函數所產生的小數,最多有效到小數點以下15位,這已經夠用了。 - 預設所出現的小數位數,不會到達小數以下15位,可以使用增加小數位數的小圖示按鈕,來增加小數的位數。
也可以用以下方式調整:格式(O)→儲存格(L)
頁籤:數字
種類(C):數字
選項:小數點位數→15 - 在C1儲存格,輸入以下函數:=RANK(B1,B$1:B$49)
RANK使用說明:[Order] 為 0 表示從陣列的最後一個項目降序排列至第一個項目 (此為預設值),
RANK(number; ref; Order)
number是要決定其排列等級的數值。
ref是樣本中資料的矩陣或範圍。
Order(選擇性) 為序列順序。
[Order] 為 1 表示從範圍的第一個項目升序排列至最後一個項目。 - 將C1複製,貼到C2:C49。
- 可將C1~C6這六個數,視為隨機產生不重複的六個數。
沒有留言:
張貼留言