top

Search

C Tutorial

.

UpGrad

C Tutorial

Random Number Generator in C

Random number generator in C refers to the process of generating any random number (within your defined range) that can be processed further to obtain the expected output. The function is vital across domains such as computer security, random testing, cryptography or statistical analysis and can be implemented to introduce unpredictability and randomness. 

After generating a sequence of random numbers, computers can generate truly random results which are hard to predict. This unpredictability helps ensure data security and avoids hacking. The random function in C has two inbuilt functions, i.e., rand() and srand(). They can generate the same and dissimilar random numbers upon execution.

Let’s explore random number generation in C and its various aspects. 

Pseudo-Random Number Generator (PRNG) In C++

Pseudo-Random Number Generator (PRNG) is a program where the conversion starting number (known as the seed) is converted to another number different from the seed. This random number generator in C++ generates an outcome that appears unpredictable but, essentially, is the result of a closely defined mathematical process. 

The inbuilt functions in C -rand() and srand() are used for random number generator in C/C++.

rand()

C doesn’t support an inbuilt function for generating a number within the range. However, the rand function works as a random number generator in C that generates a random integer in the range of 0 to RAND_MAX. You can use rand () to generate a number (in the range) as num = (rand() % (upper – lower + 1)) + lower.

Note that the RAND_MAX is a symbolic constant defined in the stdlib.h header file. Based on the C libraries, its value can be greater or lesser than 32767.

This random number generator in C within a range accepts values from [0, Range_max]. Note that the Range_max value can be an integer.

While using the rand() function in a program, you must implement the stdlib.h header file since the rand() function is defined in the stdlib header file. It doesn’t contain any seed number. Hence, when you execute the same program frequently, it returns identical values.


Syntax

int rand(void) 

The rand function doesn’t accept any parameters; it only returns random numbers.


srand()

The srand() in C is used to initialise the value of the seed. In case srand() is not initialised, the seed value in srand() function is set as srand(1). Based on the initial point, the srand() function generates a unique series of pseudo-random numbers.

Note that you must use a rand() function to use a srand() function. You require the srand() function when you want to set the seed’s value only once in a program to produce various results of random integers (before calling the rand() function).

 

Syntax

void srand(unsigned int)
int srand (unsigned int seed) 

 Here the seed is an integer value that determines a seed for a new series of pseudo-random numbers. The srand() function is called the seed for the rand() function. It doesn’t have a return value.

 

Difference Between rand () and srand () with example

rand()

srand()

The rand() function generates random numbers in C.

The srand() function initialises the seed value of PRNG.

You can call it any number of times

You can only call it once to check the random number.

It doesn’t accept any parameters.

It accepts the value that works as a seed in the random number generator.

The return values contain random numbers whenever you call rand().

No return value exists in srand() in C.

 

Example of rand() function

The following example program generates a random number using C's rand() function.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int main() {
 
//Prints random numbers
        printf("%d\n", rand());
return 0;
}
 
Output
1750198242

In the above example,  the random number generation remains unchanged after each execution. The reason is the srand() function’s value is 1.


Example of srand() function

If you want to generate different random numbers, you can use the following example.

Here’s the code for a random number generator in C that generates random numbers on every execution using srand() in C.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int main() {
// Uses the current time as a seed to enter into the random number generator
srand(time(NULL));
 
// Generate and print five random numbers
for (int i = 0; i < 3; i++) {
    int random_num = rand();
        printf("%d\n", random_num);
}
 
return 0;
}

In the above example, the time() function (from time.h library) obtains a different seed value (on each execution) depending on the current time.  Passing ‘time(NULL)’ as the argument to the srand() function provides the number of seconds passed since the Unix timestamp. So, it provides a different seed value on each execution.

The for loop generates and prints three random numbers. Whenever a loop iterates, a new random number is generated, and its output is printed through printf() function. Specifying a range helps you to customise the random number generator in C within a range.

Output
465478901
578901754
986549018


C++ Random Float

The value generated by the random number generator function is an integer which can be extremely long. Hence, you can use float or double values. The method to generate the random float value is the same as for generating the integer value. However, the only difference is that you have to explicitly define that the value you expect from the rand() function must be float. Usually, the float value occupies more storage space than the short int.

Here’s the syntax to generate the random float value:

((float)rand()/(float)(RAND_MAX))

 

Program to generate random float number:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int main() {
srand(time(NULL));
 
// Generates and prints a random float number between 0 and 1
float random_fl = (float)rand() / RAND_MAX;
printf("%f\n", random_fl);
 }      
Output
0.350918

 In the above example, srand(time(NULL)) seeds the random number generator with the existing time. Hence, it always generates random sequences on every program execution. Dividing (float)rand() function by RAND_MAX gives you a floating-point random number between 0 and 1. The printf() function prints the output random float number.


C++ Random Number Between 0 And 1

Here's an example program to generate random numbers between 0 and 1.

#include <iostream>
#include <cstdlib>
#include <ctime>
 
int main() {
srand(time(NULL));
 
// Generate and print five different random numbers between 0 and 1
for (int i =    0; i < 5; i++) {
    float random_num= static_cast<double>(rand()) / RAND_MAX;
    std::cout << random_num << std::endl;
}
 
return 0;
}

 In the above example, srand() function with a varying seed value is used to generate various random numbers between 0 and 1 in C++. The current time is used as the seed value.

The for loop generates three different random numbers between 0 and 1. This is possible because the program divides rand() by RAND_MAX. So, it brings the random value in the range of 0 to 1. The float variable stores the result. The std::cout prints the output random numbers.

Output
0.573359
0.234546
0.879325
0.092631
0.671947

 

C++ Random Number Between 1 And 10

Here’s a program to generate random number in C between 1 to 10.

#include <iostream>
#include <cstdlib>
#include <ctime>
 
int main() {
srand(time(NULL));
 
// Generates and prints a random number between 1 and 10
int random_num = (rand() % 10) + 1;
std::cout << random_num << std::endl;
 
return 0;
}
Output
7

 In the above program for a random number generator in C++, srand(time(NULL)) seeds the random number generator with the current time. The above program for generate random number in C between 1 to 10 provides a unique result on every execution.

The rand() function will generate a random number in the range of 0 to RAND_MAX.  The modulus operator % with 10 provides the result in the range of 0 to 9. The addition of 1 to the result modifies the range to 1 to 10. The std::cout prints the output random number.

By applying the same logic, you can generate a random number in C between 1 and 100 and also a random number in C between 10 and 100.

 

Conclusion

To sum up, understanding and utilising the random number generator in C allows us to introduce randomness into our programs, enabling a wide range of applications such as simulations, games, and encryption algorithms. 

We hope our tutorial will help you analyse random number generation in C to implement it at the right place for optimum efficiency. Along with going through this tutorial, strengthening your technical skills is another aspect that aspirants must explore, and this is what upGrad encourages!

upGrad’s Master of Science in Computer Science, provided by Liverpool John Moores University, is an excellent course to fuel your career advancement in the tech industry. Providing prominent aspects like expert faculty guidance, live sessions, AI-powered learning sessions, real-life projects and more, upGrad is ready to skyrocket your growth in STEM! 

Enroll now to start your journey!


FAQs

Q. What is the need to generate random numbers?

Random numbers are useful in probability theory, statistical analysis, contemporary computer simulations, cryptocurrency wallets, and digital cryptography. 

Q. How can you generate 1000 random numbers in C?

You need to evaluate a function rand() % 1000 that generates random numbers between 1 to 1000. It returns a value between [0,999]. If you want to get a value between [1, 1000], you will add 1 to the modulus value, i.e., rand()%1000 + 1/. 

Q. What is a true random number generator?

A true random number generator (TRNG) is a device or function that works on an unpredictable physical phenomenon known as an entropy source. It generates non-deterministic data like a sequence of numbers to seed security algorithms.

Q. What is the difference between PRNG and TRNG?

While TRNG is a non-deterministic random number generator, PRNG is a deterministic one. PRNG employs methods based on a brief beginning value to create a long-length random number. TRNG creates random numbers by utilising the randomness of natural occurrences. Because it is impartial, unpredictable, and independent, the generated random number is known as a real random number.

Leave a Reply

Your email address will not be published. Required fields are marked *