伪随机数生成
-
void srand(uint32_t seed)
设置随机数种子,初始种子值为2。
- 参数
seed – 初始种子。
- 返回
无
- Note
为保证随机性,推荐读取CPU内核cycle寄存器(CSR_MCYCLE)的当前值作为seed输入。
-
int32_t rand(void)
返回一个随机数,范围[0-0x7ffffffe]。
- 返回
随机32位自然数。
- Note
后续(按需)可以通过取模操作(mod)将随机数范围进一步缩小。
-
void random_ascending_subset(int32_t range, int32_t n, uint8_t *output)
在从0开始的N个连续自然数中选择M个不重复的数字,按照从小到大的顺序排列。
- 参数
range – 自然数池大小,比如range=10表示从0-9的连续自然数池中选择。range不超过256。
n – 需要选择的不重复数字的总数。
output – 被选中的数字存放于output数组中,有效元素个数由n决定。output的数组的大小应不小于min{range, max(n)}。
- 返回
无
-
void random_partial_shuffle(uint8_t *pool, int32_t size, int32_t n)
从元素池pool中随机抽取n个元素, 交换至元素池头部位置。
- 参数
pool – 元素池,元素为0-255的8bit无符号数,无初始顺序强制要求。
size – 元素池大小。
n – 需要抽取的元素数目。
- 返回
无
- Note
该函数执行后,元素池pool中起始n个元素为抽取结果。