gpt4 book ai didi

c - 有效地在开-开区间 (0,1) 上生成随机数

转载 作者:太空狗 更新时间:2023-10-29 14:55:06 25 4
gpt4 key购买 nike

我正在寻找一种在开-开区间 (0,1) 上生成随机 float 的有效方法。我目前有一个 RNG,它在 [0, (2^32)-1] 的闭区间生成随机整数。我已经通过简单地将整数 RNG 的结果乘以 1/((2^32)-1) 而不是除以 (2^32),在区间 [0,1) 上创建了一个半开浮点 RNG -1 因为它效率低下。

我目前在区间 (0,1) 上生成数字的方法是使用如下所示的条件语句:

float open_open_flt = (closed_open_flt==0) ? closed_open_flt : FLT_MIN; 

不幸的是,这是相当低效的,因为它是控制代码,我觉得它引入了一些偏差。

谁能提出替代方案?

最佳答案

你已经在那里了。

当前生成器生成的两个 float 之间的最小距离是 1/(2^32)。

因此,您的生成器正在有效地生成 [0,1-1/(2^32)]

1/(2^32) 大于 FLT_MIN。

因此,如果您将 FLT_MIN 添加到生成器,

float open_open_flt = FLT_MIN + closed_open_flt;

您将获得 [FLT_MIN,1-(1/(2^32))+FLT_MIN],它用作(0,1) 生成器。

关于c - 有效地在开-开区间 (0,1) 上生成随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17955007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com