---
name: "random"
type: command
status: ok
groups: ["Math"]
arma3_since: "0.50"
locality: {"argument": null, "effect": null, "server_exec": false}
source: https://community.bistudio.com/wiki/random
revid: 377710
updated: 2026-01-02T09:03:49Z
---

# random

*Command · Math · Arma 3 v0.50 · introduced in Operation Flashpoint v1.00*

## Description

|  |  |
|---|---|
|  |  |

|  |  |
|---|---|
| [#Syntax 1](../commands/random.md#syntax-1) | generates a random floating point value |
| [#Syntax 2](../commands/random.md#syntax-2) | generates a [Gaussian Distribution](https://en.wikipedia.org/wiki/Normal_distribution) (ref: Technically, it is a rescaled <https://en.wikipedia.org/wiki/Bates_distribution> with n = 4.<br>The distribution is split in two at its midpoint and scaled linearly such that its maximum lies at the specified midpoint.). It uses the same method as [setTriggerTimeout](../commands/setTriggerTimeout.md) command and is quite useful for e.g spawning loot, making more valuable items more rare |
| [#Syntax 3](../commands/random.md#syntax-3) | generates a [seed-based](https://en.wikipedia.org/wiki/Random_seed) random number |
| [#Syntax 4](../commands/random.md#syntax-4) | generates a [seed-based](https://en.wikipedia.org/wiki/Random_seed) random noise (**not** Perlin) texture based on provided seed and returning the value at supplied coordinates |

## Syntax

### Syntax 1

```sqf
random x
```

**Parameters:**

- `x`: [Number](../topics/Number.md)

**Returns:** [Number](../topics/Number.md) from 0 (included) to *x*, **ex**cluded

> [!IMPORTANT]
> *x* was accidentally **in**cluded due to a bug introduced in Arma 2 v1.00 and fixed in Arma 3 v2.18.

### Syntax 2

*since arma3 1.56*

```sqf
random [min, mid, max]
```

**Parameters:**

- `min`: [Number](../topics/Number.md)
- `mid`: [Number](../topics/Number.md)
- `max`: [Number](../topics/Number.md)

**Returns:** [Number](../topics/Number.md) in range from *min* to *max*, weighted by *mid* - **can** be higher than max (maximum value is `min + max - mid`)

### Syntax 3

*since arma3 1.68*

```sqf
seed random x
```

**Parameters:**

- `seed`: [Number](../topics/Number.md) - an **integer**. Any float value will be truncated (e.g -0.9, -0.1, 0.1 or 0.9 will be read as **0**)
- `x`: [Number](../topics/Number.md)

**Returns:** [Number](../topics/Number.md) from 0 (included) to *x* (**in**cluded)

### Syntax 4

*since arma3 1.68*

```sqf
seed random [x, y]
```

**Parameters:**

- `seed`: [Number](../topics/Number.md)
- `x`: [Number](../topics/Number.md) - x texture position
- `y`: [Number](../topics/Number.md) - y texture position

**Returns:** [Number](../topics/Number.md) from 0 (included) to 1 (**ex**cluded)

## Examples

### Example 1

```sqf
_rNumber = random 1;
```

### Example 2

```sqf
_rNumber = random -10;
```

### Example 3

Generate a random position inside a circle (see also Example Code: Random Area Distribution)

```sqf
_center getPos [_radius * sqrt random 1, random 360];
```

### Example 4

Select a random value from an array:

```sqf
_array = ["apples", "pears", "bananas", "M16"];

_random = _array select floor random count _array;    // before Arma 2
_random = _array call BIS_fnc_selectRandom;            // since Arma 2
_random = selectRandom _array;                        // since Arma 3 v1.56
```

### Example 5

Visualisation of [#Syntax 4](../commands/random.md#syntax-4) (warning, it takes a bit to execute and draw):

```sqf
private _parent = call BIS_fnc_displayMission;
if (is3DEN) then { _parent = findDisplay 313 };
private _display = _parent createDisplay "RscDisplayEmpty";
private _background = _disp ctrlCreate ["RscBackground", -1];

private _coef = 0.1;

for "_x" from 1 to 100 do
{
    for "_y" from 1 to 100 do
    {
        private _random = 0 random [_x * _coef, _y * _coef];
        private _dot = _display ctrlCreate ["RscBackground", -1];

        _dot ctrlSetPosition [0.5 + pixelW * _x, 0.5 + pixelH * _y, pixelW, pixelH];
        _dot ctrlSetBackgroundColor [_random, _random, _random, 1];
        _dot ctrlCommit 0;
    };
};
```

## See also

[selectRandom](../commands/selectRandom.md) · [selectRandomWeighted](../commands/selectRandomWeighted.md) · Example Code: Random Area Distribution

## Community notes

**Hcpookie** — 2015-07-12

Random selections including negative numbers can be obtained via:

```sqf
_xRnd = round (random 200) - 100;
```

This will yield numbers between -100 and 100.
- Be careful using random numbers in multiplayer, each client will come up with a different result. See multiplayer tutorials for more general information about locality.
- The number returned is unlikely to be a whole number.

To return a whole number use either **[round](../commands/round.md)**, **[ceil](../commands/ceil.md)** or **[floor](../commands/floor.md)** together with [random](../commands/random.md)

```sqf
x = round    (random 5) // will return 0, 1, 2, 3, 4 or 5.    (non-uniform distribution, 0 and 5 are half as likely to be selected than any of the other numbers)
x = floor    (random 5) // will return 0, 1, 2, 3 or 4.        (uniform distribution, all numbers have the same probability of being selected)
x = ceil    (random 5) // will return 0, 1, 2, 3, 4 or 5.    (0 is very unlikely, but possible, as ceil 0 is 0)
```

---

**Lou Montana** — 2018-07-22

|  |  |  |  |  |  |  |  |  |  |  |  |
|---|---|---|---|---|---|---|---|---|---|---|---|
| + Repartition comparison | Formula | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| ```sqf<br>floor random 10<br>``` | 10% | 10% | 10% | 10% | 10% | 10% | 10% | 10% | 10% | 10% |  |
| ```sqf<br>floor random [0, 5, 10]<br>``` | 0% | 2% | 7% | 17% | 25% | 25% | 17% | 7% | 2% | 0% |  |
| ```sqf<br>floor random [0, 10, 0]<br>``` | 0% | 0% | 1% | 2% | 5% | 9% | 14% | 19% | 24% | 26% |  |
| ```sqf<br>floor random [0, 10, 5]<br>``` | 0% | 0% | 0% | 1% | 2% | 5% | 9% | 16% | 28% | 38% |  |

<sub>Source: [BI Community Wiki — random](https://community.bistudio.com/wiki/random) (revision 377710).</sub>
