Top community members
All Wiki Articles Create Wiki Article

Welcome to Dirask IT community! ❤ 💻
We are community of people that helps each other.

If you are beginner in IT field, you are more then welcome to ask questions, it will help you to learn faster. We are here to help you.

We are always beginner in something, we just need to remember it along the way.

there are no wrong questions - Ask Question

Java - 4 different ways to generate random double in range

0 contributions
10 points

1. Generate random double in range with ThreadLocalRandom

public static double nextDoubleBetween(double min, double max) {
    return (ThreadLocalRandom.current().nextDouble() * (max - min)) + min;
}

Example:

System.out.println(nextDoubleBetween(4.0d, 8.0d));     // 7.413037434364464
System.out.println(nextDoubleBetween(100.0d, 900.0d)); // 847.7762445206072
System.out.println(nextDoubleBetween(-6.5d, -3.5d));   // -4.858339745847818


2. Generate random double in range with Random class

public static double nextDoubleBetween2(double min, double max) {
    return (new Random().nextDouble() * (max - min)) + min;
}

Example:

System.out.println(nextDoubleBetween2(4.0d, 8.0d));     // 4.052304029464722
System.out.println(nextDoubleBetween2(100.0d, 900.0d)); // 768.620491027832
System.out.println(nextDoubleBetween2(-6.5d, -3.5d));   // -5.824402153491974


3. Generate random double in range with Random and DoubleStream

public static double nextDoubleBetween3(double min, double max) {
    // java 8 + DoubleStream
    return new Random().doubles(min, max).limit(1).findFirst().getAsDouble();
}

Example:

System.out.println(nextDoubleBetween3(4.0d, 8.0d));     // 5.957144260406494
System.out.println(nextDoubleBetween3(100.0d, 900.0d)); // 859.1829833984375
System.out.println(nextDoubleBetween3(-6.5d, -3.5d));   // -4.081723213195801


4. Generate random double in range with Math

public static double nextDoubleBetween4(double min, double max) {
    return (Math.random() * (max - min)) + min;
}

Example:

System.out.println(nextDoubleBetween4(4.0d, 8.0d));     // 5.137720584869385
System.out.println(nextDoubleBetween4(100.0d, 900.0d)); // 603.9947204589844
System.out.println(nextDoubleBetween4(-6.5d, -3.5d));   // -4.018362045288086


5. Test if double in range methods work as expected

public static void testDoubleInRange() {
	List<Double> list = new ArrayList<>();
	for (int i = 0; i < 2000; i++) {
		double rand = nextDoubleBetween(2.0d, 4.0d);
		//double rand = nextDoubleBetween2(2.0d, 4.0d);
		//double rand = nextDoubleBetween3(2.0d, 4.0d);
		//double rand = nextDoubleBetween4(2.0d, 4.0d);
		list.add(rand);
	}
	list.sort(Double::compareTo);

	// print 2000 sorted doubles in asc order
	list.forEach(System.out::println);
}

public static void main(String[] args) {
	testDoubleInRange();
}

Output (only first 5 x doubles and last 5 x doubles):

2.0010556305772016
2.0012970579895804
2.001744530227831
2.002021244118838
2.003799609313888
...
3.9969095941710693
3.9974610558327024
3.9980601986911837
3.998751363307557
3.999256829257631


References

ThreadLocalRandom - Java docs
Math - Java docs
Random - Java docs
DoubleStream - Java docs

0 contributions

Checkout latest Findings & News:

Checkout latest questions:

Checkout latest wiki articles:

Hey 👋
Would you like to know what we do?
  • Dirask is IT community, where we share coding knowledge and help each other to solve coding problems.
  • We welcome everyone,
    no matter what the experience,
    no matter how basic the question is,
    this community will help you.
Read more