---
# System prepended metadata

title: C++ rand() vs srand()

---

# C++ rand() vs srand()
## ```rand()```
- Purpose: Generates a pseudo-random integer.
- Return Type: int
- Range: Between 0 and RAND_MAX (a constant defined in <cstdlib>, often 32767).
- Usage
    ```c++
    int random_number = rand();  // 0 to RAND_MAX
    ```
- Note
    - Without seeding, produces the same sequence every program run
    - Uses a deterministic algorithm (not truly random)

## ```srand()```
- Purpose: "Seeds" the random number generator
- Parameter: Takes an unsigned integer seed value
- Usage:
    ```c++
    srand(123);        // Set a fixed seed
    srand(time(0));    // Set a variable seed based on current time
    ```
- Effect:
    - Initializes the random number sequence
    - Different seeds produce different sequences
    - Same seed produces the same sequence

## Notes
**What's seeding?**
- Seeding is the process of initializing a pseudo-random number generator (PRNG) with a starting value, called a seed.
- Why seeding matters
    - A pseudo-random number generator doesn't create truly random numbers — it creates a deterministic sequence that appears random, based on an initial seed value.
        - Same seed → Same sequence
        - Different seed → Different sequence
    - This is useful because:
        - You can reproduce results if you know the seed (great for debugging or simulations).
        - You can create different results each time by using a changing seed (like time(0)).