Algorithm 位与int/float随机数发生器的关系

Algorithm 位与int/float随机数发生器的关系,algorithm,random,floating-point,integer,bit,Algorithm,Random,Floating Point,Integer,Bit,我想找出int或float的位和RNG之间的关系 (随机的意思是均匀分布的) 我得到了一个完美的布尔随机生成器,我被要求实现一个随机的32位整数生成器(包括负、零和正)。我要做的是为32位中的每一位生成一个随机布尔值,并将它们合并为一个随机整数 我做的对吗 同样从另一个角度来看,如果给我一个完美的随机32位整数生成器,我能说每个位都可以被认为均匀分布在0和1上吗 浮动(不仅在0和1之间,而且在整个浮动范围内)怎么样 我可以用同样的方法生成随机IEEE 745浮点吗?是。这正是我们要做的。在

我想找出int或float的位和RNG之间的关系

(随机的意思是均匀分布的)


我得到了一个完美的布尔随机生成器,我被要求实现一个随机的32位整数生成器(包括负、零和正)。我要做的是为32位中的每一位生成一个随机布尔值,并将它们合并为一个随机整数

我做的对吗


同样从另一个角度来看,如果给我一个完美的随机32位整数生成器,我能说每个位都可以被认为均匀分布在0和1上吗


浮动(不仅在0和1之间,而且在整个浮动范围内)怎么样


我可以用同样的方法生成随机IEEE 745浮点吗?

是。这正是我们要做的。在这种情况下,域很容易映射,像a这样的东西就更难了。

是的,您确实做得很好,使用32个不同的数字绘制,将得到一个均匀分布的随机变量

说明:每个数字可以由32个0/1绘图的唯一组合生成。同一个组合不会生成2个数字,也不会生成2个组合的数字-这意味着,每个数字的概率为1/2^32-正如预期的那样


是的,同样的原则也适用于这里。有2^32“方法”选择32位数字,与上一个问题类似-您可以看到数字独立地均匀分布在每位{0,1}上



[0,1]范围内的随机均匀分布浮点可以通过
randUnsignedInt()/(2^32-1)
生成。另一种方法是绘制一个
int
,然后以浮点形式重新解释它-假设两者使用相同的位数(基本上-两者都是32位数,它们仅在解释方式上有所不同…)请注意,该方法不在范围[0,1]内.

你是说产生一个均匀随机的6边骰子结果比产生一个均匀随机的浮点数要难吗?
产生32个随机位的方法可以应用于浮点数吗?float的位表示格式与integers@PascalCuoq在[0,5]范围内创建一个均匀随机整数并不是一件简单的事情,只需确定一个位-generator@NiklasB. 也许吧,但生成一个均匀随机的浮点值确实很困难。公认答案中的解决方案存在细微或非细微偏差。将一个随机整数除以二的幂是一个很好的开始,但需要将FPU舍入模式更改为最接近的偶数优先,以避免“偶数”浮点的偏差。@PascalCuoq我认为这里的答案只是指整数生成部分。如果我需要使用完美的布尔随机生成器,我可以用同样的方法生成float吗?@JacksonTale如果你想要任何float,只需创建一个int并将其重新解释为float即可。但是请注意,由于浮点算术语义(以绝对值表示的小数值比大数值多),它不是100%一致的,但是您可以表示的每个浮点都有完全相同的生成概率-1/2^32。您可以看看我的编辑吗。我真的很想知道32轮随机布尔值是否可以覆盖整个浮点范围,并且每个浮点数都是统一生成的。@JacksonTale您必须为浮点定义“统一”的含义。你是说每两个浮点数被选择的概率相同吗?或者对于每个
a、b、c、d
,使得
b-a=d-c
数字(设为
x
)的概率为:
a@JacksonTale是的,这是我建议的备选方案——但请注意,得到一个数字
x
的概率,即
0