sta*_*icx -4 java random automated-tests probability
我在java中实现了一个测试数据生成器,用于生成java原始类型的随机值.可能的参数值的范围不受限制.例如,如果我想生成随机整数或浮点数,我会考虑所有可能的值(MAX_INT-MIN_INT).为此,我使用的东西如下:
但是,这样做,我注意到生成的值总是很高(接近参数类型的最大值和最小值).例如,在100000次迭代之后,随机运算符未生成[-1000 - 1000]范围内的值.对于花车来说同样的事情,多头.等等,...
你能解释一下随机运算符在Java中的表现吗?当我们考虑Java类型的所有可能值时,为什么生成的值总是很高?
提前致谢.
ami*_*mit 11
你的"高"和"低"的先例是错误的.
单个值(假设均匀分布)的概率是在[-1000,1000]IS 2001/(MAX_INT-MIN_INT),是绕0.00000046.
该概率非常小,因此预期的"小"变量数量也很小.
实际上,在均匀分布中[MIN_INT,MAX_INT],大约一半的元素将是正的 - 而一半是负的.
同样,只有其中的四分之一会之间0对MAX_INT/2(比1000要高得多,你知道的).
如果你想要更多的"低"值,可以将自己缩小到较小的元素范围,或者使用非均匀分布,这种分布有望产生更接近0的值(例如高斯值).
看看这段代码:
int count1 = 0, count2=0;
for (int i = 0; i < 10000; i++) {
float x = genFloat(null);
if (x < 1E38 && x > 0) count1++;
if (x > Float.MAX_VALUE - 1E38) count2++;
}
System.out.println(count1);
System.out.println(count2);
Run Code Online (Sandbox Code Playgroud)
它会生成10000个随机浮点数,并检查其中包含的数量[0,1E38]和数量[MAX-1E38,MAX]
注意,当谈到浮点数时,每个浮点数的理论概率为~1 /(2*MAX)〜= 14.7%.
正如您所看到的,在相同范围内的"接近0"和"接近MAX"在其范围内产生的变量经验数相似.
| 归档时间: |
|
| 查看次数: |
212 次 |
| 最近记录: |