代码之家  ›  专栏  ›  技术社区  ›  Nope

当使用随机时,哪种形式返回相等的50%几率?

  •  9
  • Nope  · 技术社区  · 17 年前

    我猜大多数内置的随机生成器都会返回这样的结果:

    [0.0, 1.0)
    

    因此,如果我希望有50%的机会,我会使用这样的方法:

    if random() < .5
    

    或者类似的:

    if random() <= .5
    

    谢谢你的帮助。

    11 回复  |  直到 17 年前
        1
  •  13
  •   dwc    17 年前

    啊,旧的“5”问题。答案如下:

    如果你要把10件事分成2件 平等的 每个部分,你需要5件东西。第一部分从0到4,第二部分从5到9。所以… < .5 是正确的。

        2
  •  7
  •   moshez    17 年前

    为什么要自己动手?python有random.choice:)

    random.choice([0,1])会给你0/1的机会——它是Python的一个标准部分,由编写random.random的同一个人编码(因此比其他人更了解它的语义)。

        3
  •  4
  •   Jason Cohen    17 年前

    对于第一个近似值,两者都有效。

    最好的方法是选择一个随机生成器,它专门发出布尔值或带范围的整数。然后你可以精确地确定范围。

    像“相等”这样的浮点运算无论如何都是不确定的。

        4
  •  3
  •   James Curran    17 年前
     if random() < .5
    

    二进制中,.5是.1000000000…. 所以,基本上,问题归结为,“在小数点后的第一个二进制数字是什么?”0(对于<.5)或1(对于.5或更高版本)?

        5
  •  1
  •   Mark Pattison    17 年前

    对于一个特定的系统,如果你真的想知道的话,你应该测试它。但可能需要一段时间:—)

    我同意其他海报的说法,第一顺序,这无关紧要。如果真的很重要,你还是需要一个更好的RNG。

    编辑: 我刚刚尝试了C中的默认RNG,尝试了100000000次,答案是相同的…

        6
  •  1
  •   tzot    17 年前
    import random
    def fifty_fifty():
        "Return 0 or 1 with 50% chance for each"
        return random.randrange(2)
    
        7
  •  0
  •   Hank Gay    17 年前
    < .5
    

    但这假设您的浮点支持足以满足您的精度要求(因为它从来没有 确切地 )

        8
  •  0
  •   Brian Knoblauch    17 年前

    如果我想要50%的机会,我会检查LSB(最低有效位)。

        9
  •  0
  •   David Thornley    17 年前

    如果你对随机数那么挑剔,不要依赖于任何内置的东西。从你信任的地方(我信任Boost,为了它的价值),获得一个有良好文档记录的RNG,并阅读文档。过去标准的RNG是出了名的糟糕,我仍然不相信它们。

    或者,使用一个整数rng,在一个范围内为您提供离散值,并将该范围除以一半。根据我的经验,RNG是积分的,浮点函数简单地除以范围的顶部。

    当然,如果这是真的,你就有答案了。如果整数rng生成0、1、2和3,则浮点等效值将为0.0、0.25、0.5和0.75,因此答案是测试<0.5。

    如果RNG不是基于积分计算,那么它是基于浮点计算,因此是不精确的。在这种情况下,无论您测试<=还是<,都无关紧要,因为无法保证精确到0.5的计算结果。

    因此,答案可能是测试<0.5,如果它有区别的话,它很可能是正确的。

        10
  •  0
  •   Coincoin    17 年前

    如果你需要真正的随机数,你可以尝试 random.org . 他们提供一个连接到设备的网络服务,检测来自宇宙的噪音。从技术上讲,仍然不是随机的,但我想已经足够接近了。

    他们有各种方式来进行查询,例如黑白图像。

        11
  •  -2
  •   user60975    17 年前

    没关系。这两个公式都会产生所需的结果。