EN
Java - 4 different ways to generate random double in range
10 points
xxxxxxxxxx
1
public static double nextDoubleBetween(double min, double max) {
2
return (ThreadLocalRandom.current().nextDouble() * (max - min)) + min;
3
}
Example:
xxxxxxxxxx
1
System.out.println(nextDoubleBetween(4.0d, 8.0d)); // 7.413037434364464
2
System.out.println(nextDoubleBetween(100.0d, 900.0d)); // 847.7762445206072
3
System.out.println(nextDoubleBetween(-6.5d, -3.5d)); // -4.858339745847818
xxxxxxxxxx
1
public static double nextDoubleBetween2(double min, double max) {
2
return (new Random().nextDouble() * (max - min)) + min;
3
}
Example:
xxxxxxxxxx
1
System.out.println(nextDoubleBetween2(4.0d, 8.0d)); // 4.052304029464722
2
System.out.println(nextDoubleBetween2(100.0d, 900.0d)); // 768.620491027832
3
System.out.println(nextDoubleBetween2(-6.5d, -3.5d)); // -5.824402153491974
xxxxxxxxxx
1
public static double nextDoubleBetween3(double min, double max) {
2
// java 8 + DoubleStream
3
return new Random().doubles(min, max).limit(1).findFirst().getAsDouble();
4
}
Example:
xxxxxxxxxx
1
System.out.println(nextDoubleBetween3(4.0d, 8.0d)); // 5.957144260406494
2
System.out.println(nextDoubleBetween3(100.0d, 900.0d)); // 859.1829833984375
3
System.out.println(nextDoubleBetween3(-6.5d, -3.5d)); // -4.081723213195801
xxxxxxxxxx
1
public static double nextDoubleBetween4(double min, double max) {
2
return (Math.random() * (max - min)) + min;
3
}
Example:
xxxxxxxxxx
1
System.out.println(nextDoubleBetween4(4.0d, 8.0d)); // 5.137720584869385
2
System.out.println(nextDoubleBetween4(100.0d, 900.0d)); // 603.9947204589844
3
System.out.println(nextDoubleBetween4(-6.5d, -3.5d)); // -4.018362045288086
xxxxxxxxxx
1
public static void testDoubleInRange() {
2
List<Double> list = new ArrayList<>();
3
for (int i = 0; i < 2000; i++) {
4
double rand = nextDoubleBetween(2.0d, 4.0d);
5
//double rand = nextDoubleBetween2(2.0d, 4.0d);
6
//double rand = nextDoubleBetween3(2.0d, 4.0d);
7
//double rand = nextDoubleBetween4(2.0d, 4.0d);
8
list.add(rand);
9
}
10
list.sort(Double::compareTo);
11
12
// print 2000 sorted doubles in asc order
13
list.forEach(System.out::println);
14
}
15
16
public static void main(String[] args) {
17
testDoubleInRange();
18
}
Output (only first 5 x doubles and last 5 x doubles):
xxxxxxxxxx
1
2.0010556305772016
2
2.0012970579895804
3
2.001744530227831
4
2.002021244118838
5
2.003799609313888
6
...
7
3.9969095941710693
8
3.9974610558327024
9
3.9980601986911837
10
3.998751363307557
11
3.999256829257631
ThreadLocalRandom - Java docs
Math - Java docs
Random - Java docs
DoubleStream - Java docs