跳到主要内容

mt_random

简介

随机数生成库 由于GS自带的random函数比较简单,如果需要生成更可靠(也就是更高质量的随机数),则需要使用mt_random库 mt_random 使用梅森缠绕算法进行随机数生成,可以生成指定范围的正整型随机数和 0 到 1 范围内的实数。

int seed = random();
auto m1 = mt_random.create_instance(seed, true);
m1.random();

组件接口

mt_random.gs

函数原型函数作用
object create_instance(int seed, bool is_random_u32 = false)创建一个随机数生成器

mt_random_instance.gs

随机数生成器功能函数

函数原型函数作用
void set_seed(int seed)重新设置生成器的种子
int random(...)生成一个随机数
float random_real(RangeMode mode = RangeMode.INCLUDE_LR)生成分布范围在 [0-1],[0-1)或(0-1) 的浮点数(默认为[0-1])
float random_real2()(弃用)生成分布范围在 [0-1) 的浮点数
float random_real3()(弃用)生成分布范围在 (0-1) 的浮点数
float normal_real(float mu, float sigma)生成随机数X, X服从均值为mu,标准差为sigma的正态分布,即 X~N(mu, sigma^2)
float lognormal_real(float m, float s)生成随机数X,X服从均值为m,标准差为s的对数正态分布,即 ln(X)~N(m,s^2)
float chi_real(float dof)生成随机数X,X服从自由度为dof的卡方分布,即X~chi^2(dof)
float cauchy_real(float x0, float gamma)生成随机数X,X服从位置参数为x0,尺度参数为gamma的柯西分布,即X~cauchy(x0,gamma)
float fisher_f_real(float d1, float d2)生成随机数X,X服从自由度为d1和 d2 的F分布,即X~F(d1,d2)
float student_t_real(float dof)生成随机数X,X服从自由度为dof 的Student-T分布,即X~T(d1,d2)
bool bernoulli_bool(float p)进行一次伯努利实验,给定实验成功的概率p,即有p*100%的概率返回true
int binomial_int(int count, float p)进行 count 次成功概率为p的伯努利实验,返回实验成功的次数X,即X~B(count,p)
int negative_binomial_int(int count, float p)生成随机数X,表示在概率为p的伯努利实验中,成功完成count次实验时总共失败的次数,即X~NB(count,p)
int geometric_int(float p)生成随机数X,表示在概率为p的伯努利实验中,第一次成功前的失败数,即X~G(p)
int poisson_int(float mu)生成随机数X,表示单位时间平均发生mu次的事件在相同时间内发生的次数,即X服从期望为mu的泊松分布,即X~Pi(mu)
float exponential_real(float mu)生成随机数X,表示单位时间/空间平均发生mu次的事件,到下一次发生所需的时间/空间,即X服从参数为mu的指数分布,即X~Exp(mu)
float gamma_real(float alpha, float beta)生成随机数X,X服从形状参数为alpha,尺度参数为beta的伽马分布,即X~Γ(alpha,beta)
float weibull_real(float a, float b)生成随机数X,X服从形状参数为a,尺度参数为b的韦伯分布
float extreme_real(float a, float b)生成随机数X,X服从参数为a,b的极值分布,即X~G(a,b)

枚举

RangeMode

用于指示生成随机浮点数的开闭区间


INCLUDE_LR, // 包含左右两端(即[0, 1])
INCLUDE_L, // 左闭右开(即[0, 1))
EXCLUDE_LR, // 开区间(即(0, 1))