由均勻隨機數發生器1 7生產出1 10

2021-08-25 16:53:44 字數 1360 閱讀 4790

假設:rand7由該函式生成:

//生成1-7之間的隨機數

int rand7()

為了獲取rand10這裡提出2種方法:方法一:

第一步:將1-7數字中的7移除掉,剩下1-6分別為一半奇數一半偶數,奇偶概率相同

第二步:將1-6資料分別於1進行按位與操作,將1-6轉換成0-1

第三步:4次迴圈,每次由1-6數字產生0-1數字,生成0-15範圍數字

第四步:由於0-15生成概率相同,丟棄掉0與11-15保留1-10

下面是偽**實現:

//將1-6資料同1進行按位與運算,將奇偶轉換為0-1

int genbit()

//生成1-10隨機數

int genonetotennormal()

count++;

} while (x <= 0 || x > 10);

return x;

}

方法二:

第一步:將1-7數字分別減去1變為0-6

第二步:進行2次隨機數生成,組成乙個二位7進製數(00-66)

第三步:將7進製資料轉為10進製資料(0-48)

第四步:去掉40到48讓個位數字(0-9)出現的概率相同

第五步:對0-39資料與10進行求餘,得到0-9資料

第六步:對0-9進行加1操作變為1-10

下面是偽**:

//通過7進製資料生成1-10

int genonetotensmart()

下面是整體測試程式:

#include "stdio.h"

int main()

}//生成1-7之間隨機數

int rand7()

//第一種方式獲取0-1之間資料

int genbit()

//第一種方式獲取1-10之間資料

int genonetotennormal()

} while (x <= 0 || x > 10);

return x;

}//第二種方式獲取1-10之間資料

int genonetotensmart()

boost 隨機數發生器

在很多應用中都需要使用隨機數。本庫力求提供乙個高效的,通用的隨機數庫。boost庫有多種隨機數生成方式。先熟悉一下各種隨機數生成器的概念。數字生成器 number generator 它是乙個函式物件,沒有引數。類似於常見的rand 均勻隨機數生成器 uniform random number ge...

opencv隨機數發生器RNG

用opencv做演算法的朋友們肯定為隨機數煩惱過,新版本一直支援隨機數產生器啦,而且還繼續支援之前版本的c格式的函式,不過與時俱進,我這裡介紹c 的rng類。它可以壓縮乙個64位的i整數並可以得到scalar和array的隨機數。目前的版本支援均勻分布隨機數和gaussian分布隨機數。隨機數的產生...

產生隨意隨機數發生器

怎樣利用給定的隨機數發生器產生其它隨意你想得到的隨機數發生器。假定給定的隨機數發生器是變數產生離散變數x 服從某一分布 比如均勻分布。高斯分布等等 隨意你想得到的隨機數發生器滿足分布 y,如果x和 y其概率密度分布函式分布為 g x h y 假定用x 隨機數發生器產生 y隨機數發生器,以下分為2步求...