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))