How to get a random number between a float range?
Use random.uniform(a, b):
>>> import random
>>> random.uniform(1.5, 1.9)
1.8733202628557872
Random float number generation
rand()
can be used to generate pseudo-random numbers in C++. In combination with RAND_MAX
and a little math, you can generate random numbers in any arbitrary interval you choose. This is sufficient for learning purposes and toy programs. If you need truly random numbers with normal distribution, you'll need to employ a more advanced method.
This will generate a number from 0.0 to 1.0, inclusive.
float r = static_cast <float> (rand()) / static_cast <float> (RAND_MAX);
This will generate a number from 0.0 to some arbitrary float
, X
:
float r2 = static_cast <float> (rand()) / (static_cast <float> (RAND_MAX/X));
This will generate a number from some arbitrary LO
to some arbitrary HI
:
float r3 = LO + static_cast <float> (rand()) /( static_cast <float> (RAND_MAX/(HI-LO)));
Note that the rand()
function will often not be sufficient if you need truly random numbers.
Before calling rand()
, you must first "seed" the random number generator by calling srand()
. This should be done once during your program's run -- not once every time you call rand()
. This is often done like this:
srand (static_cast <unsigned> (time(0)));
In order to call rand
or srand
you must #include <cstdlib>
.
In order to call time
, you must #include <ctime>
.
How to generate random float number in C
Try:
float x = (float)rand()/(float)(RAND_MAX/a);
To understand how this works consider the following.
N = a random value in [0..RAND_MAX] inclusively.
The above equation (removing the casts for clarity) becomes:
N/(RAND_MAX/a)
But division by a fraction is the equivalent to multiplying by said fraction's reciprocal, so this is equivalent to:
N * (a/RAND_MAX)
which can be rewritten as:
a * (N/RAND_MAX)
Considering N/RAND_MAX
is always a floating point value between 0.0 and 1.0, this will generate a value between 0.0 and a
.
Alternatively, you can use the following, which effectively does the breakdown I showed above. I actually prefer this simply because it is clearer what is actually going on (to me, anyway):
float x = ((float)rand()/(float)(RAND_MAX)) * a;
Note: the floating point representation of a
must be exact or this will never hit your absolute edge case of a
(it will get close). See this article for the gritty details about why.
Sample
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, char *argv[])
{
srand((unsigned int)time(NULL));
float a = 5.0;
for (int i=0;i<20;i++)
printf("%f\n", ((float)rand()/(float)(RAND_MAX)) * a);
return 0;
}
Output
1.625741
3.832026
4.853078
0.687247
0.568085
2.810053
3.561830
3.674827
2.814782
3.047727
3.154944
0.141873
4.464814
0.124696
0.766487
2.349450
2.201889
2.148071
2.624953
2.578719
Generate random array of floats between a range
np.random.uniform
fits your use case:
sampl = np.random.uniform(low=0.5, high=13.3, size=(50,))
Update Oct 2019:
While the syntax is still supported, it looks like the API changed with NumPy 1.17 to support greater control over the random number generator. Going forward the API has changed and you should look at https://docs.scipy.org/doc/numpy/reference/random/generated/numpy.random.Generator.uniform.html
The enhancement proposal is here: https://numpy.org/neps/nep-0019-rng-policy.html
How to get a random float value between two floats?
Try with
public static void main(String[] args) {
Random rand = new Random();
float result = rand.nextFloat() * (-1f - (-30f)) + (-30f);
System.out.println(result);
}
Get a random number between 0.0200 and 0.120 (float numbers)
You could use
(Math.random() * (0.120 - 0.0200) + 0.0200).toFixed(4)
toFixed(n) is used to convert a number into a string, keeping only the "n" decimals.
Hope it helps ^_^
Related Topics
What Is the Easiest Way to Remove All Packages Installed by Pip
How to Manually Install a Pypi Module Without Pip/Easy_Install
How to Remove Nan Values from a Numpy Array
Intersection of Two Graphs in Python, Find the X Value
How to Reduce a Jpeg Size to a 'Desired Size'
Is There a Short Contains Function for Lists
Convert Utf-8 with Bom to Utf-8 with No Bom in Python
Python Iterator Is Empty After Performing Some Action on It
How to Find the Number of Arguments of a Python Function
Why Is It String.Join(List) Instead of List.Join(String)
How to Access the Child Classes of an Object in Django Without Knowing the Name of the Child Class
Python/Numpy First Occurrence of Subarray
Appending Pandas Dataframes Generated in a for Loop
Matplotlib: Save Plot to Numpy Array
Regex Matching 5-Digit Substrings Not Enclosed with Digits
Django 1.7 Throws Django.Core.Exceptions.Appregistrynotready: Models Aren't Loaded Yet