在回答另一个问题时,提供了以下解决方案,由OpenBSD提供,为了简洁起见,
uint32_t foo( uint32_t limit ) {
uint32_t min = -limit % limit, r = 0;
for(;;) {
r = random_function();
if ( r >= min ) break;
}
return r % limit;
}
Run Code Online (Sandbox Code Playgroud)
这条线是如何uint32_t min = -limit % limit工作的?我想知道的是,是否有数学证据证明它确实为随机数计算了一些下限并充分消除了模偏差?