Difference between revisions of "random"

From Bohemia Interactive Community
Jump to navigation Jump to search
(Fix description)
(Fix description and examples)
 
(8 intermediate revisions by the same user not shown)
Line 14: Line 14:
  
 
|game5= arma2oa
 
|game5= arma2oa
|version5= 1.51
+
|version5= 1.50
  
 
|game6= tkoh
 
|game6= tkoh
Line 24: Line 24:
 
|gr1= Math
 
|gr1= Math
  
|descr= [[Image:bellcurve.jpg|right|200px]] Random real (floating point) value from 0 (inclusive) to x (not inclusive).<br><br>
+
|descr= [[Image:bellcurve.jpg|thumb|120px|[[#Syntax 2|Syntax&nbsp;2]]'s distribution]]
{{GVI|arma3|1.56}} alternative syntax is added, allowing the definition of {{Wikipedia|Normal_distribution|Gaussian Distribution}}<ref>Technically, it is a rescaled {{Wikipedia|Bates_distribution|Bates distribution}} with n = 4. The distribution is split in two at its midpoint and scaled linearly such that its maximum lies at the specified midpoint.</ref> params. Uses the same method as [[setTriggerTimeout]] command. Quite useful for spawning loot for example, making more valuable items more rare ({{HashLink|#Alternative Syntax 1}})<br><br>
+
{{{!}}
{{GVI|arma3|1.68}} two alternative syntaxes are available:
+
! style="padding-right: 1em; vertical-align: top; white-space: nowrap" {{!}} {{HashLink|#Syntax 1}}
* allowing to generate {{Wikipedia|Random seed|seed-based}} random number based on provided seed ({{HashLink|#Alternative Syntax 2}})
+
{{!}} generates a random floating point value
* generating {{Wikipedia|Random seed|seed-based}} random noise texture based on provided seed and returning a single number between 0 (included) and 1 (excluded) at supplied ''x'' and ''y'' coordinates ({{HashLink|#Alternative Syntax 3}})
+
{{!}}-
 +
! style="padding-right: 1em; vertical-align: top; white-space: nowrap" {{!}}  {{HashLink|#Syntax 2}}
 +
{{!}} generates a {{Wikipedia|Normal_distribution|Gaussian Distribution}}<ref>Technically, it is a rescaled {{Wikipedia|Bates distribution}} with n = 4. The distribution is split in two at its midpoint and scaled linearly such that its maximum lies at the specified midpoint.</ref>. It uses the same method as [[setTriggerTimeout]] command and is quite useful for e.g spawning loot, making more valuable items more rare
 +
{{!}}-
 +
! style="padding-right: 1em; vertical-align: top; white-space: nowrap" {{!}}  {{HashLink|#Syntax 3}}
 +
{{!}} generates a {{Wikipedia|Random seed|seed-based}} random number
 +
{{!}}-
 +
! style="padding-right: 1em; vertical-align: top; white-space: nowrap" {{!}}  {{HashLink|#Syntax 4}}
 +
{{!}} generates a {{Wikipedia|Random seed|seed-based}} random noise ('''not''' Perlin) texture based on provided seed and returning the value at supplied coordinates
 +
{{!}}}
  
 
|s1= [[random]] x
 
|s1= [[random]] x
Line 34: Line 43:
 
|p1= x: [[Number]]
 
|p1= x: [[Number]]
  
|r1= [[Number]]
+
|r1= [[Number]] from 0 (included) to ''x'' (excluded)
  
|s2= [[random]] [min, mid, max] {{Since|arma3|1.56|y}}
+
|s2= [[random]] [min, mid, max]
  
|p21= [min, mid, max]: [[Array]]
+
|s2since= arma3 1.56
  
|p22= min: [[Number]]
+
|p21= min: [[Number]]
  
|p23= mid: [[Number]]
+
|p22= mid: [[Number]]
  
|p24= max: [[Number]]
+
|p23= max: [[Number]]
  
|r2= [[Number]]
+
|r2= [[Number]] in range from ''min'' to ''max'', weighted by ''mid''
  
|s3= seed [[random]] x {{Since|arma3|1.68|y}}
+
|s3= seed [[random]] x
  
|p41= seed: [[Number]]
+
|s3since= arma3 1.68
 +
 
 +
|p41= seed: [[Number]] - an '''integer'''. Any float value will be truncated (e.g -0.9, -0.1, 0.1 or 0.9 will be read as '''0''')
  
 
|p42= x: [[Number]]
 
|p42= x: [[Number]]
  
|r3= [[Number]] - Value from 0 to x
+
|r3= [[Number]] from 0 (included) to ''x'' (excluded)
  
|s4= seed [[random]] [x, y] {{Since|arma3|1.68|y}}
+
|s4= seed [[random]] [x, y]
 +
 
 +
|s4since= arma3 1.68
  
 
|p61= seed: [[Number]]
 
|p61= seed: [[Number]]
  
|p62= [x, y]: [[Array]] - texture position (''not'' a Perlin noise)
+
|p62= x: [[Number]] - x texture position
  
|p63= x: [[Number]]
+
|p63= y: [[Number]] - y texture position
  
|p64= y: [[Number]]
+
|r4= [[Number]] from 0 (included) to 1 (excluded)
  
|r4= [[Number]] - Value from 0 to 1
 
 
 
 
|x1= <code>_rNumber = [[random]] 1;</code>
 
|x1= <code>_rNumber = [[random]] 1;</code>
  
Line 73: Line 84:
  
 
|x3= Generate a random position inside a circle (see also [[Example Code: Random Area Distribution]])
 
|x3= Generate a random position inside a circle (see also [[Example Code: Random Area Distribution]])
<code>_center [[getPos]] [<nowiki/>_radius * [[sqrt]] [[random]] 1, [[random]] 360];</code>
+
<code>_center [[getPos]] [_radius * [[sqrt]] [[random]] 1, [[random]] 360];</code>
  
|x4= To select random value from an array:
+
|x4= Select a random value from an array:
 
<code>_array = ["apples", "pears", "bananas", "M16"];
 
<code>_array = ["apples", "pears", "bananas", "M16"];
_random = _array [[select]] [[floor]] [[random]] [[count]] _array;
+
 
{{cc|{{Since|arma3|1.56}}}}
+
_random = _array [[select]] [[floor]] [[random]] [[count]] _array; {{cc|Before {{arma2}}}}
_random = [[selectRandom]] _array;</code>
+
_random = _array [[call]] [[BIS_fnc_selectRandom]]; {{cc|Since {{arma2}}}}
 +
_random = [[selectRandom]] _array; {{cc|Since {{arma3}} v1.56}}</code>
  
 
|seealso= [[selectRandom]], [[selectRandomWeighted]]
 
|seealso= [[selectRandom]], [[selectRandomWeighted]]
Line 85: Line 97:
  
 
<dl class="command_description">
 
<dl class="command_description">
 +
 
<dt></dt>
 
<dt></dt>
 
<dd class="notedate">Posted on July 12, 2015 - 20:32 (UTC)</dd>
 
<dd class="notedate">Posted on July 12, 2015 - 20:32 (UTC)</dd>
Line 96: Line 109:
 
* The number returned is unlikely to be a whole number.<br>
 
* The number returned is unlikely to be a whole number.<br>
 
To return a whole number use either '''[[round]]''', '''[[ceil]]''' or '''[[floor]]''' together with [[random]]:
 
To return a whole number use either '''[[round]]''', '''[[ceil]]''' or '''[[floor]]''' together with [[random]]:
<code>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)
+
<code>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 = [[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)</code>
+
x = [[ceil]]  ([[random]] 5) will return 0, 1, 2, 3, 4 or 5. (0 is very unlikely, but possible, as ceil 0 is 0)</code>
 
</dd>
 
</dd>
  
Line 167: Line 180:
 
|}
 
|}
 
</dd>
 
</dd>
 +
 
</dl>
 
</dl>

Latest revision as of 23:07, 17 August 2021

Hover & click on the images for description

Description

Description:
Syntax 2's distribution
Syntax 1 generates a random floating point value
Syntax 2 generates a Gaussian Distribution[1]. It uses the same method as setTriggerTimeout command and is quite useful for e.g spawning loot, making more valuable items more rare
Syntax 3 generates a seed-based random number
Syntax 4 generates a seed-based random noise (not Perlin) texture based on provided seed and returning the value at supplied coordinates
Groups:
Math

Syntax 1

Syntax:
random x
Parameters:
x: Number
Return Value:
Number from 0 (included) to x (excluded)

Syntax 2

Syntax:
random [min, mid, max]
Parameters:
min: Number
mid: Number
max: Number
Return Value:
Number in range from min to max, weighted by mid

Syntax 3

Syntax:
seed random x
Parameters:
seed: Number - 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
Return Value:
Number from 0 (included) to x (excluded)

Syntax 4

Syntax:
seed random [x, y]
Parameters:
seed: Number
x: Number - x texture position
y: Number - y texture position
Return Value:
Number from 0 (included) to 1 (excluded)

Examples

Example 1:
_rNumber = random 1;
Example 2:
_rNumber = random -10;
Example 3:
Generate a random position inside a circle (see also Example Code: Random Area Distribution) _center getPos [_radius * sqrt random 1, random 360];
Example 4:
Select a random value from an array: _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

Additional Information

See also:
selectRandomselectRandomWeighted

Notes

Report bugs on the Feedback Tracker and/or discuss them on the Arma Discord or on the Forums.
Only post proven facts here! Add Note
Posted on July 12, 2015 - 20:32 (UTC)
Hcpookie
Random selections including negative numbers can be obtained via: _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, ceil or floor together with random: 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)
Posted on July 22, 2018 - 12:58 (UTC+2)
Lou Montana
Repartition comparison
Formula 0 1 2 3 4 5 6 7 8 9
floor random 10; 10% 10% 10% 10% 10% 10% 10% 10% 10% 10%
floor random [0, 5, 10] 0% 2% 7% 17% 25% 25% 17% 7% 2% 0%
floor random [0, 10, 0] 0% 0% 1% 2% 5% 9% 14% 19% 24% 26%
floor random [0, 10, 5] 0% 0% 0% 1% 2% 5% 9% 16% 28% 38%
  1. Technically, it is a rescaled Bates distribution with n = 4. The distribution is split in two at its midpoint and scaled linearly such that its maximum lies at the specified midpoint.