我猜大多数内置的随机生成器会返回这样的内容:
[0.0, 1.0)
所以如果我想要50%的机会我会使用这样的东西:
if random() < .5
或类似的东西:
if random() <= .5
感谢您的帮助。
答案 0 :(得分:13)
如果你要将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)
没关系。两种配方都能产生理想的结果。