In this article, we are going to learn how to generate random double numbers in a range in C#.
To generate a pseudorandom double number we can use the NextDouble
method from the Random
class:
var random = new Random(); var rDouble = random.NextDouble();
This will return a double that is at least 0.0 and less than 1.0.
The RandomNumberGenerator
class does not have a built-in method to generate a secure random double. In order to get a double between 0.0 and 1.0, we need to first create a secure random generated integer with the GetInt32
method:
RandomNumberGenerator.Create(); var denominator = RandomNumberGenerator.GetInt32(2, int.MaxValue);
The lower bound passed to GetInt32
must be greater than 0 to avoid the chance of the method returning a 0 causing a divide by zero error later when we are converting from integer to double. Additionally, if we wish the double to not have the possibility of equaling 1, then the lower bound passed to GetInt32
must be 2 or greater.
Then we can divide 1 by the secure random integer we just created and cast the result to a double to generate a secure random double:
public static double GetSecureDouble() { RandomNumberGenerator.Create(); var denominator = RandomNumberGenerator.GetInt32(2, int.MaxValue); double sDouble = (double) 1 / denominator; return sDouble; }
The double’s length and value will be determined by the upper and lower bound criteria given to the RandomNumberGenerator.GetInt32
method.
The Random
class provides a simple way to generate a double between 0 and 1. However, we want to get a number larger than 1 or less than zero within a custom range. Let’s accomplish this with our own custom method:
public static double GetPseudoDoubleWithinRange(double lowerBound, double upperBound) { var random = new Random(); var rDouble = random.NextDouble(); var rRangeDouble = rDouble * (upperBound - lowerBound) + lowerBound; return rRangeDouble; }
We begin our custom method by generating a double with the NextDouble
method. Notice that next we use a specific formula that modifies the double into the specified range. Multiplying the double value by the difference between the lowerBound
and upperbound
ensures that the double is below the upper bound. Then we add the lowerBound
which keeps the double above the lower bound.
We can create a secure double using the same formula and utilizing our custom GetSecureDouble
method:
public static double GetSecureDoubleWithinRange(double lowerBound, double upperBound) { var rDouble = GetSecureDouble(); var rRangeDouble = (double) rDouble * (upperBound - lowerBound) + lowerBound; return rRangeDouble; }
Now, if we want to use our custom methods, we can call them in the same way we would as the methods within the Random class:
var pseduoDoubleWithinRange = GetPseudoDoubleWithinRange(16, 30000); var secureDoubleWithinRange = GetSecureDoubleWithinRange(4, 123000);
That’s it, let’s summarize what we’ve learned.
The two main ways to generate random double numbers in a range in C# is using the Random
and RandomNumberGenerator
classes. At first glance, it could appear slightly overwhelming when attempting to generate a double within a range. However, we hope that the above explanations clearly show how you can create your own methods to obtain your required random results.
If you want to achieve the same thing with integers, you can visit our article on how to generate random integers in C#.
HttpClient and RestSharp are HTTP Client libraries that we can use to consume APIs. Working…
Unit Testing is extremely important for creating robust software. It's very simple in principle but…
Have you ever needed to sort a list of items, but didn't want to use…
In ASP.NET Core dependency injection, we usually register injectable dependencies at the start of our…
In this article, we are going to learn more about ranges and indices in C#,…
Issue #128 of the Code Maze weekly. Check out what's new this week and enjoy…
View Comments
Use this one if you need a uniform distribution: