实现java.util.Random.nextInt
发布时间:2020-12-15 00:48:35 所属栏目:Java 来源:网络整理
导读:此函数为 java.util.Random .它返回一个均匀分布在0和给定n之间的伪随机int.不幸的是我没有得到它. public int nextInt(int n) { if (n = 0) throw new IllegalArgumentException("n must be positive"); if ((n -n) == n) // i.e.,n is a power of 2 return
此函数为
java.util.Random .它返回一个均匀分布在0和给定n之间的伪随机int.不幸的是我没有得到它.
public int nextInt(int n) { if (n <= 0) throw new IllegalArgumentException("n must be positive"); if ((n & -n) == n) // i.e.,n is a power of 2 return (int)((n * (long)next(31)) >> 31); int bits,val; do { bits = next(31); val = bits % n; } while (bits - val + (n-1) < 0); return val; } 我的问题是: >为什么要特别处理n是两个权力的情况?只是为了表演吗? 解决方法
接下来生成随机位.
>当n为2的幂时,可以通过产生随机比特来产生该范围内的随机整数(我假定始终生成31并抛出一些用于重现性).这个代码路径比较简单,我想这是一个比较常用的例子,所以在这种情况下,值得一个特殊的“快速路径”.>当n不是2的幂时,它会将数字丢弃在范围的“顶”,使得随机数均匀分布.例如.想象我们有n = 3,想象我们使用3位而不是31位.所以位是从0到7之间随机产生的数字.那么你可以在那里生成一个公平的随机数吗?答案:如果位为6或7,我们将其丢弃并生成一个新的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |