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

时间:2009-02-26 16:15:38

标签: python random

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

[0.0, 1.0)

所以如果我想要50%的机会我会使用这样的东西:

if random() < .5

或类似的东西:

if random() <= .5

感谢您的帮助。

12 个答案:

答案 0 :(得分:13)

啊,旧的“.5”问题。这是答案:

如果你要将10个东西分成两个相等的部分,那么每个部分需要5个东西。第一部分为0至4,第二部分为5-9。所以... < .5是正确的。

答案 1 :(得分:8)

为什么一个人呢? Python有random.choice:)

random.choice([0,1])会给你0/1的机会相等 - 而且它是Python的标准部分,由编写random.random的同一个人编码(因此了解更多关于它的语义比其他任何人都多)

答案 2 :(得分:4)

首先,要么适用。

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

无论如何,具有浮点的“相等”操作都是不确定的。

答案 3 :(得分:3)

 if random() < .5

在二进制文件中,.5是.10000000000 .... 因此,基本上,问题简化为“小数点后的第一个二进制数字是什么... 0(适用于<.5)或1(适用于.5或更多)?”

答案 4 :(得分:1)

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

我同意其他海报,对于第一个订单,没关系。如果它确实重要,无论如何你都需要一个更好的RNG。

编辑:我刚尝试了C#中的默认RNG,尝试了1,000,000,000次,答案相同......

答案 5 :(得分:1)

import random
def fifty_fifty():
    "Return 0 or 1 with 50% chance for each"
    return random.randrange(2)

答案 6 :(得分:0)

< .5

但是假设您的浮点支持足以满足您的精度要求(因为它永远不会完全)。

答案 7 :(得分:0)

如果我想要50%的几率,我只需要检查LSB(最低有效位)。

答案 8 :(得分:0)

如果您需要真正的随机数字,可以尝试random.org。它们提供连接到设备的Web服务,该设备可检测来自宇宙的噪声。从技术上来说仍然没有随机,但我认为足够接近。

他们可以通过各种方式进行查询,例如黑白图像。

答案 9 :(得分:0)

如果你对你的随机数很挑剔,不要依赖任何内置的东西。从您信任的地方获取记录良好的RNG(我相信Boost,这是值得的),并阅读文档。过去,标准的RNG非常糟糕,我仍然不相信它们。

或者,使用整数RNG,它给出一个范围内的离散值,并将范围除以一半。根据我的经验,RNG是不可或缺的,浮点函数简单地除以范围的顶部。

当然,如果这是真的,你就得到了答案。如果整数RNG产生0,1,2和3,则浮点等效值将为0.0,0.25,0.5和0.75,因此答案是测试&lt; 0.5。

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

所以,答案可能是测试&lt; 0.5,如果它产生影响,这可能是正确的。

答案 10 :(得分:0)

这是我喜欢使用的版本:

import random

# Returns True 50% of the time. 
def fifty_fifty():
    if random.random() < .5:
        return True
    return False

用法:

if fifty_fifty():
    # Do something half the time
else:
    # Do something else instead half the time

答案 11 :(得分:-2)

没关系。两种配方都能产生理想的结果。