【发布时间】:2015-04-20 11:41:03
【问题描述】:
我正在 java 中实现一个测试数据生成器,用于为 java 原始类型生成随机值。 可能的参数值的范围不受限制。例如,如果我想生成一个随机整数或浮点数,我会考虑所有可能的值(MAX_INT-MIN_INT)。为此,我使用了类似的东西:
- Random().nextInt()
- Random().nextLong()
- Random().nextFloat()*Float.MAX_VALUE
- Random().nextDouble()*Double.MAX_VALUE
- 等等……
但是,这样做,我注意到生成的值总是很高(接近参数类型的最大值和最小值)。例如,在 100000 次迭代之后,随机运算符没有生成 [-1000 - 1000] 范围内的值。花车,多头也是一样。等等……
你能解释一下随机运算符在 Java 中的表现吗?为什么在考虑 Java 类型的所有可能值时生成的值总是很高?
提前致谢。
【问题讨论】:
-
尝试总结大量生成的值。由于分布均匀,总和趋于0。
-
概率是 215 万分之一,所以我建议您重试 1000 万次左右,您应该会看到其中一些数字出现...
-
大数字很多,小数字不多,所以当然大数字比小数字更常见。 (您确实要求均匀分布...)
-
是的,我想是的,这是一个概率问题
-
protected int genInteger(Parameter p) { return new Random().nextInt(); } protected float genFloat(Parameter p) { return (2*(new Random().nextFloat())-1)*Float.MAX_VALUE; } protected long genLong(Parameter p) { return new Random().nextLong();这里是代码 sn-p 。我发现它有点连线,因为在 10000 次迭代之后,它无法生成至少一个介于 [-1000 - 1000] 之间的值。但是,当我显示生成的值时,我可以看到它们总是接近 MAX 或 MIN 的限制。你怎么解释?
标签: java random automated-tests probability