Random Functions in C ++

Source: Internet
Author: User
Tags random seed

 

1. the random function is not ansi c standard and cannot be compiled by GCC, Vc, or other compilers. You can use the rand function in C ++.

1. The C ++ standard function library provides a random number generator Rand, which returns a pseudo random integer evenly distributed between 0 and rand_max. Rand_max must be 32767 at least. The rand () function does not accept parameters. The default value is 1 (the start value ). The random number generator always starts with the same seed, so the pseudo-random sequence is also the same, without the random meaning. (But this facilitates program debugging)
2. In C ++, another function srand () can specify different numbers (unsigned integer yuan) as seeds. However, if the seeds are the same, the pseudo-random sequence is also the same. One way is to let the user input seeds, but it is still not ideal.

3. It is ideal to use a variable number, such as time, as the seed of the random number generator. The value of time varies every moment. So the seeds are different, so the random numbers are also different.
// C ++ random function (VC Program)
# Include <stdlib. h>
# Include <iostream. h>
# Include <time. h>
# Deprecision max 100
Void main ()
{
Srand (unsigned) Time (null); // The srand () function generates a Random Seed starting from the current time
For (INT I = 0; I <10; I ++)
Cout <rand () % max <Endl; // Max is the maximum value, and its random field is 0 ~ MAX-1
}
Ii. Rand () Usage
Rand () does not require a parameter. It returns an arbitrary integer from 0 to the maximum random number. The maximum random number is usually a fixed large integer. In this way, if you want to generate 0 ~ 10 integers, which can be expressed:

Int n = rand () % 11;
In this way, the value of N is a 0 ~ A random number of 10 ~ 10, it is like this:
Int n = 1 + rand () % 10;
In summary, it can be expressed:
A + rand () % N
Where a is the starting value and N is the range of integers. 0 ~ 1 decimal point, you can first get 0 ~ Then, divide all the values by 10 to get the 10 random decimal places from random to very. To get the random decimal places from random to percentile, you must first get 0 ~ The 10 Integers of 100 are all divided by 100.
This type of push.
Generally, the random numbers generated by rand () are the same as the previous one during each operation. This design is intended to facilitate program debugging. To generate different random numbers each time, you can use the srand (SEED) function for randomization. Different random numbers can be generated as the seed varies.

As you said, it can also contain time. h header file, and then use srand (time (0) to use the current time to randomize the random number generator, in this way, different random number sequences can be obtained every two runs (as long as the interval between two runs exceeds 1 second ). Note: rand () generates a random number from 0 to rand_max (32767), and 32767 cannot be divisible by 11.
Therefore, the random number obtained by INT n = rand () % 11; is not 9 from the 0-10 consistent distribution, and the probability of 10 to 0-8 digits is about 11/32767 less;
So we need to take 0 ~ M's random number. If M is smaller than the hour, but M is large, for example, M = 30000, the probability of getting 0-is twice the number of the following digits, serious non-conforming random distribution!

1. the random function is not ansi c standard and cannot be compiled by GCC, Vc, or other compilers. You can use the rand function in C ++.

1. The C ++ standard function library provides a random number generator Rand, which returns a pseudo random integer evenly distributed between 0 and rand_max. Rand_max must be 32767 at least. The rand () function does not accept parameters. The default value is 1 (the start value ). The random number generator always starts with the same seed, so the pseudo-random sequence is also the same, without the random meaning. (But this facilitates program debugging)
2. In C ++, another function srand () can specify different numbers (unsigned integer yuan) as seeds. However, if the seeds are the same, the pseudo-random sequence is also the same. One way is to let the user input seeds, but it is still not ideal.

3. It is ideal to use a variable number, such as time, as the seed of the random number generator. The value of time varies every moment. So the seeds are different, so the random numbers are also different.
// C ++ random function (VC Program)
# Include <stdlib. h>
# Include <iostream. h>
# Include <time. h>
# Deprecision max 100
Void main ()
{
Srand (unsigned) Time (null); // The srand () function generates a Random Seed starting from the current time
For (INT I = 0; I <10; I ++)
Cout <rand () % max <Endl; // Max is the maximum value, and its random field is 0 ~ MAX-1
}
Ii. Rand () Usage
Rand () does not require a parameter. It returns an arbitrary integer from 0 to the maximum random number. The maximum random number is usually a fixed large integer. In this way, if you want to generate 0 ~ 10 integers, which can be expressed:

Int n = rand () % 11;
In this way, the value of N is a 0 ~ A random number of 10 ~ 10, it is like this:
Int n = 1 + rand () % 10;
In summary, it can be expressed:
A + rand () % N
Where a is the starting value and N is the range of integers. 0 ~ 1 decimal point, you can first get 0 ~ Then, divide all the values by 10 to get the 10 random decimal places from random to very. To get the random decimal places from random to percentile, you must first get 0 ~ The 10 Integers of 100 are all divided by 100.
This type of push.
Generally, the random numbers generated by rand () are the same as the previous one during each operation. This design is intended to facilitate program debugging. To generate different random numbers each time, you can use the srand (SEED) function for randomization. Different random numbers can be generated as the seed varies.

As you said, it can also contain time. h header file, and then use srand (time (0) to use the current time to randomize the random number generator, in this way, different random number sequences can be obtained every two runs (as long as the interval between two runs exceeds 1 second ). Note: rand () generates a random number from 0 to rand_max (32767), and 32767 cannot be divisible by 11.
Therefore, the random number obtained by INT n = rand () % 11; is not 9 from the 0-10 consistent distribution, and the probability of 10 to 0-8 digits is about 11/32767 less;
So we need to take 0 ~ M's random number. If M is smaller than the hour, but M is large, for example, M = 30000, the probability of getting 0-is twice the number of the following digits, serious non-conforming random distribution!
Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.