gpt4 book ai didi

c - C中的偏置随机数生成器函数

转载 作者:太空狗 更新时间:2023-10-29 15:28:17 27 4
gpt4 key购买 nike

尝试在 C 中创建以下函数:

bool randBool(double bias)

随机返回 01

让我感到困惑的部分是我想允许用户输入 [-1.0, 1.0] 范围内的“偏差”,这表示输出为 0< 的可能性1

以下是输入偏差应如何影响函数的几个示例:

============================================= ========

randBool(-1.0) 应该在 100% 的时间内返回 0

randBool(1.0) 应该在 100% 的时间内返回 1

randBool(-0.5) 返回 0 的可能性比 1 高 50%。

randBool(0.05) 返回 1 的可能性比 0 高 5%。

randBool(0.0) 返回 0 的可能性并不比 1 高。

============================================= ========

我几乎可以肯定这是一个概率问题,但我对这个话题不太熟悉,所以我对如何实现这个功能感到困惑。

最佳答案

像这样:

bool randBool(double bias) {
return rand() < ((RAND_MAX + 1.0) * ((bias + 1) / 2));
}

((bias + 1) / 2)部分是获得 [0,1] 范围内的偏差,而不是 [-1,1]。这可以避免,如果 bias参数更改为已在 [0,1] 范围内。

然后将偏差定义为返回 1 的概率。与:

  • 0.0 (对应于你的偏见-1.0):全零
  • 0.25 (对应于你的偏见 -0.5 ):25% 1,75% 0
  • 0.5 (对应于你的偏见 0.0 ):即使是 1 和 0 的混合
  • 0.525 (对应于你的偏见 0.05 ):52.5% 1,47.5% 0
  • 1.0 (对应你的偏见 1.0 ):全部


关于 RAND_MAX 的注释

  • 如果 RAND_MAX < INT_MAX , 然后 RAND_MAX + 1可以用来代替 RAND_MAX + 1.0 .

  • 如果 RAND_MAX + 1.0不能用 double 表示如果没有四舍五入(引用 Are all integer values perfectly represented as doubles? ),那么所提出的解决方案是不可靠的。
    在此类平台上的一种方法可能是重新调整 rand() 的结果。到可以用 int 表示的范围或 double (取决于您使用的是 RAND_MAX + 1 还是 RAND_MAX + 1.0 )。
    或者,使用不同的随机数生成器(没有这个问题),考虑到 rand() 的许多低质量实现,这可能是个好主意。在那里。

关于c - C中的偏置随机数生成器函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52480128/

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