@@ -16,7 +16,7 @@ Generates a pseudorandom number by using a well-known and fully-reproducible alg
16
16
## Syntax
17
17
18
18
``` C
19
- int rand ( void );
19
+ int rand (void);
20
20
```
21
21
22
22
## Return Value
@@ -44,73 +44,84 @@ For additional compatibility information, see [Compatibility](../../c-runtime-li
44
44
```C
45
45
// crt_rand.c
46
46
// This program seeds the random-number generator
47
- // with the time, then exercises the rand function.
48
- //
47
+ // with a fixed seed, then exercises the rand function
48
+ // to demonstrate generating random numbers, and
49
+ // random numbers in a specified range.
49
50
50
- #include <stdlib.h>
51
- #include <stdio.h>
52
- #include <time.h>
51
+ #include <stdlib.h> // rand(), srand()
52
+ #include <stdio.h> // printf()
53
53
54
- void SimpleRandDemo( int n )
54
+ void SimpleRandDemo(int n)
55
55
{
56
- // Print n random numbers.
57
- int i;
58
- for( i = 0; i < n; i++ )
59
- printf( " %6d\n", rand() );
56
+ // Print n random numbers.
57
+ for (int i = 0; i < n; i++)
58
+ {
59
+ printf(" %6d\n", rand());
60
+ }
60
61
}
61
62
62
- void RangedRandDemo( int range_min, int range_max, int n )
63
+ void RangedRandDemo(int range_min, int range_max, int n)
63
64
{
64
- // Generate random numbers in the half-closed interval
65
- // [range_min, range_max). In other words,
66
- // range_min <= random number < range_max
67
- int i;
68
- for ( i = 0; i < n; i++ )
69
- {
70
- int u = (double)rand() / (RAND_MAX + 1) * (range_max - range_min)
71
- + range_min;
72
- printf( " %6d\n", u);
73
- }
65
+ // Generate random numbers in the half-closed interval [range_min, range_max)
66
+ // That is, range_min <= random number < range_max
67
+
68
+ for (int i = 0; i < n; i++)
69
+ {
70
+ // Note: This method of generating random numbers in a range is not suitable for
71
+ // applications that require high quality randomn numbers.
72
+ // rand() has a small output range [0,32767], making it unsuitable for
73
+ // generating random numbers across a large range. This method also introduces bias.
74
+ // More suitable random number functions are available in the C++ <random> header.
75
+ // See https://docs.microsoft.com/cpp/standard-library/random
76
+ int r = ((double)rand() / RAND_MAX ) * (range_max - range_min) + range_min;
77
+ printf(" %6d\n", r);
78
+ }
74
79
}
75
80
76
- int main( void )
81
+ int main(void)
77
82
{
78
- // Seed the random-number generator with the current time so that
79
- // the numbers will be different every time we run.
80
- srand( (unsigned)time( NULL ) );
81
-
82
- SimpleRandDemo( 10 );
83
- printf("\n");
84
- RangedRandDemo( -100, 100, 10 );
83
+ // Seed the random-number generator with a fixed seed so that
84
+ // the numbers will be the same every time we run.
85
+ srand(1792);
86
+
87
+ printf("Simple random number demo ====\n\n");
88
+ SimpleRandDemo(10);
89
+ printf("\nRandom number in a range demo ====\n\n");
90
+ RangedRandDemo(-100, 100, 10);
85
91
}
86
92
```
87
93
88
94
``` Output
89
- 22036
90
- 18330
91
- 11651
92
- 27464
93
- 18093
94
- 3284
95
- 11785
96
- 14686
97
- 11447
98
- 11285
99
-
100
- 74
101
- 48
102
- 27
103
- 65
104
- 96
105
- 64
106
- -5
107
- -42
108
- -55
109
- 66
95
+ Simple random number demo ====
96
+
97
+ 5890
98
+ 1279
99
+ 19497
100
+ 1207
101
+ 11420
102
+ 3377
103
+ 15317
104
+ 29489
105
+ 9716
106
+ 23323
107
+
108
+ Random number in a range demo ====
109
+
110
+ -82
111
+ -46
112
+ 50
113
+ 77
114
+ -47
115
+ 32
116
+ 76
117
+ -13
118
+ -58
119
+ 90
110
120
```
111
121
112
122
## See also
113
123
114
- [ Floating-Point Support] ( ../../c-runtime-library/floating-point-support.md ) <br />
115
- [ ` srand ` ] ( srand.md ) <br />
116
- [ ` rand_s ` ] ( rand-s.md ) <br />
124
+ [ Floating-Point Support] ( ../../c-runtime-library/floating-point-support.md ) \
125
+ [ ` srand ` ] ( srand.md ) \
126
+ [ ` rand_s ` ] ( rand-s.md ) \
127
+ [ C++ ` <random> ` library] ( https://docs.microsoft.com/cpp/standard-library/random )
0 commit comments