I understand that random number generators use the modulo operator to generate a random number within a range. What I am curious is why is it better to use that than division. For example, I could generate a random number in the range of min
to max
by using the equation:
(max-min) * random_number/maximum_possible_number + min
where maximum_possible_number
is the largest possible number that can be represented.
This works because random_number/maximum_possible_number
generates a number between 0 and 1. When that's multiplied by max-min
it is a number between min
and max
.
Why is using a modulo algorithm better than this algorithm?
Edit:
To test this algorithm I wrote the following Matlab code to randomly generate 10000 numbers between 0 and 1 bit by bit and plot them:
clear all;
numBits = 32;
numbersToGenerate = 10000;
% Generate 10000 random numbers between 0 and 1
for i = 1:numbersToGenerate
bits = randi([0 1], numBits, 1);
s = 0;
maxNumber = 0;
for bit = 1:numBits
s = s + bits(bit)*2^bit;
maxNumber = maxNumber + 2^bit;
end
number(i) = s/maxNumber;
end
% Break into sections and count numbers within each section
size = .01;
for s = 0:size:1-size
sections(int8(s/size)+1) = sum(number>s & number<s+size);
end
plot (0:size:1-size, sections);
xlabel('Number');
ylabel('Count');
Edit2: (To give a more detailed explanation about what is happening in my code). I generate 10000 random numbers. This is done by generating 32 bits using the randi() function (for each number). While this is being done the largest possible number is also generating (32 1's in a row). Then the random number is calculated by dividing the random 32 bits by the largest possible number (32 bits of 1).