【发布时间】:2011-11-05 10:32:05
【问题描述】:
在 [x..y] 范围内生成一个随机数,其中 x 和 y 是任意浮点数。使用函数 random(),它从 P 个均匀分布的数字中返回一个范围为 [0..1] 的随机浮点数(称为“密度”)。必须保持均匀分布,P 也必须按比例缩放。
我认为,此类问题没有简单的解决方案。为了简化一点,我问你如何在区间 [-0.5 .. 0.5] 中生成一个数字,然后在 [0 .. 2] 中,然后在 [-2 .. 0] 中,保持均匀性和密度?因此,对于 [0 .. 2],它必须从 P*2 均匀分布的数中生成一个随机数。
显而易见的简单解决方案random() * (x - y) + y 不会生成所有可能的数字,因为所有abs(x-y)>1.0 案例的密度都较低。许多可能的值将被遗漏。请记住,random() 仅返回 P 个可能数字中的一个数字。然后,如果你将这个数字乘以 Q,它只会给你 P 个可能的值之一,按 Q 缩放,但你还必须将密度 P 缩放 Q。
【问题讨论】:
-
阅读您的 cmets,您似乎已经知道答案(或者您的 cmets 不会那么迫切,对吗?)我想看看您对这个问题的解决方案,关于为什么您的解决方案有效而不是其他回答者给出的争论性讨论。
-
您是否正在寻找所有 IEEE 浮点表示的统一分布?或者您是否正在寻找数字范围内的均匀分布,以浮点数表示?只有当您所需的分辨率可以用尾数表示时,后者才有可能。
-
最好的起点是
http://en.wikipedia.org/wiki//dev/random- 因为你对“保持均匀性和密度”的定义与我的不同,这让我想起了康托尔的不同层次的无穷大;。