aud*_*tic 5 c random algorithm random-sample intervals
我正在寻找一种在开放区间(0,1)上生成随机浮点数的有效方法.我目前有一个RNG,它在闭合闭合间隔[0,(2 ^ 32)-1]上生成随机整数.我已经在区间[0,1)上创建了一个半开浮点RNG,只需将整数RNG的结果乘以1 /((2 ^ 32)-1)而不是除以(2 ^ 32) -1因为它效率低下.
我目前在间隔(0,1)上生成数字的方式是使用如下所示的条件语句:
float open_open_flt = (closed_open_flt==0) ? closed_open_flt : FLT_MIN;
Run Code Online (Sandbox Code Playgroud)
不幸的是,这是非常低效的,因为它是控制代码,我觉得它引入了一些偏见.
任何人都可以提出替代方案吗?
你已经在那里了。
当前生成器产生的两个浮点数之间的最小距离是 1/(2^32)。
因此,您的生成器有效地生成[0,1-1/(2^32)]。
1/(2^32) 大于 FLT_MIN。
因此,如果将 FLT_MIN 添加到生成器中,
float open_open_flt = FLT_MIN + closed_open_flt;
Run Code Online (Sandbox Code Playgroud)
你会得到[FLT_MIN,1-(1/(2^32))+FLT_MIN],它作为(0,1)生成器工作。