也许我在想这个,但我正试图找到一种很好的方法来获得两个均匀对数分布的点之间的随机数。 假设我有两个界限0.001和1000,我想找到6个对数均匀分布的随机数。所以这些数字:0.002,0.033,0.543,1.634,34.673,765.234 ...现在说我正在寻找7个随机数,它们也会在这个范围内大致均匀排序......我正在使用爪哇
答案 0 :(得分:0)
为简单起见,我跳过了边界检查。据推测,0 <0。 lowerLimit&lt; UPPERLIMIT。
对限制的检查是因为舍入误差至少在理论上可能导致结果超出所需范围。
import java.util.Arrays;
import java.util.Random;
public class Test {
public static void main(String[] args) {
Random rand = new Random(3);
System.out.println(Arrays.toString(logRandom(rand, 0.001, 1000, 7)));
System.out.println(Arrays.toString(logRandom(rand, 0.001, 1000, 7)));
System.out.println(Arrays.toString(logRandom(rand, 0.001, 1000, 7)));
System.out.println(Arrays.toString(logRandom(rand, 0.001, 1000, 7)));
}
public static double[] logRandom(Random rand, double lowerLimit,
double upperLimit, int count) {
double[] result = new double[count];
double logLower = Math.log(lowerLimit);
double logUpper = Math.log(upperLimit);
for (int i = 0; i < count; i++) {
double raw = rand.nextDouble();
result[i] = Math.exp(raw * (logUpper - logLower) + logLower);
if (result[i] < lowerLimit) {
result[i] = lowerLimit;
} else if (result[i] > upperLimit) {
result[i] = upperLimit;
}
}
Arrays.sort(result);
return result;
}
}