class_randomnumbergenerator.rst 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. :github_url: hide
  2. .. DO NOT EDIT THIS FILE!!!
  3. .. Generated automatically from Godot engine sources.
  4. .. Generator: https://github.com/godotengine/godot/tree/4.2/doc/tools/make_rst.py.
  5. .. XML source: https://github.com/godotengine/godot/tree/4.2/doc/classes/RandomNumberGenerator.xml.
  6. .. _class_RandomNumberGenerator:
  7. RandomNumberGenerator
  8. =====================
  9. **Inherits:** :ref:`RefCounted<class_RefCounted>` **<** :ref:`Object<class_Object>`
  10. Provides methods for generating pseudo-random numbers.
  11. .. rst-class:: classref-introduction-group
  12. Description
  13. -----------
  14. RandomNumberGenerator is a class for generating pseudo-random numbers. It currently uses `PCG32 <https://www.pcg-random.org/>`__.
  15. \ **Note:** The underlying algorithm is an implementation detail and should not be depended upon.
  16. To generate a random float number (within a given range) based on a time-dependent seed:
  17. ::
  18. var rng = RandomNumberGenerator.new()
  19. func _ready():
  20. var my_random_number = rng.randf_range(-10.0, 10.0)
  21. .. rst-class:: classref-introduction-group
  22. Tutorials
  23. ---------
  24. - :doc:`Random number generation <../tutorials/math/random_number_generation>`
  25. .. rst-class:: classref-reftable-group
  26. Properties
  27. ----------
  28. .. table::
  29. :widths: auto
  30. +-----------------------+----------------------------------------------------------+-------+
  31. | :ref:`int<class_int>` | :ref:`seed<class_RandomNumberGenerator_property_seed>` | ``0`` |
  32. +-----------------------+----------------------------------------------------------+-------+
  33. | :ref:`int<class_int>` | :ref:`state<class_RandomNumberGenerator_property_state>` | ``0`` |
  34. +-----------------------+----------------------------------------------------------+-------+
  35. .. rst-class:: classref-reftable-group
  36. Methods
  37. -------
  38. .. table::
  39. :widths: auto
  40. +---------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
  41. | :ref:`float<class_float>` | :ref:`randf<class_RandomNumberGenerator_method_randf>` **(** **)** |
  42. +---------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
  43. | :ref:`float<class_float>` | :ref:`randf_range<class_RandomNumberGenerator_method_randf_range>` **(** :ref:`float<class_float>` from, :ref:`float<class_float>` to **)** |
  44. +---------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
  45. | :ref:`float<class_float>` | :ref:`randfn<class_RandomNumberGenerator_method_randfn>` **(** :ref:`float<class_float>` mean=0.0, :ref:`float<class_float>` deviation=1.0 **)** |
  46. +---------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
  47. | :ref:`int<class_int>` | :ref:`randi<class_RandomNumberGenerator_method_randi>` **(** **)** |
  48. +---------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
  49. | :ref:`int<class_int>` | :ref:`randi_range<class_RandomNumberGenerator_method_randi_range>` **(** :ref:`int<class_int>` from, :ref:`int<class_int>` to **)** |
  50. +---------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
  51. | void | :ref:`randomize<class_RandomNumberGenerator_method_randomize>` **(** **)** |
  52. +---------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
  53. .. rst-class:: classref-section-separator
  54. ----
  55. .. rst-class:: classref-descriptions-group
  56. Property Descriptions
  57. ---------------------
  58. .. _class_RandomNumberGenerator_property_seed:
  59. .. rst-class:: classref-property
  60. :ref:`int<class_int>` **seed** = ``0``
  61. .. rst-class:: classref-property-setget
  62. - void **set_seed** **(** :ref:`int<class_int>` value **)**
  63. - :ref:`int<class_int>` **get_seed** **(** **)**
  64. Initializes the random number generator state based on the given seed value. A given seed will give a reproducible sequence of pseudo-random numbers.
  65. \ **Note:** The RNG does not have an avalanche effect, and can output similar random streams given similar seeds. Consider using a hash function to improve your seed quality if they're sourced externally.
  66. \ **Note:** Setting this property produces a side effect of changing the internal :ref:`state<class_RandomNumberGenerator_property_state>`, so make sure to initialize the seed *before* modifying the :ref:`state<class_RandomNumberGenerator_property_state>`:
  67. \ **Note:** The default value of this property is pseudo-random, and changes when calling :ref:`randomize<class_RandomNumberGenerator_method_randomize>`. The ``0`` value documented here is a placeholder, and not the actual default seed.
  68. ::
  69. var rng = RandomNumberGenerator.new()
  70. rng.seed = hash("Godot")
  71. rng.state = 100 # Restore to some previously saved state.
  72. .. rst-class:: classref-item-separator
  73. ----
  74. .. _class_RandomNumberGenerator_property_state:
  75. .. rst-class:: classref-property
  76. :ref:`int<class_int>` **state** = ``0``
  77. .. rst-class:: classref-property-setget
  78. - void **set_state** **(** :ref:`int<class_int>` value **)**
  79. - :ref:`int<class_int>` **get_state** **(** **)**
  80. The current state of the random number generator. Save and restore this property to restore the generator to a previous state:
  81. ::
  82. var rng = RandomNumberGenerator.new()
  83. print(rng.randf())
  84. var saved_state = rng.state # Store current state.
  85. print(rng.randf()) # Advance internal state.
  86. rng.state = saved_state # Restore the state.
  87. print(rng.randf()) # Prints the same value as in previous.
  88. \ **Note:** Do not set state to arbitrary values, since the random number generator requires the state to have certain qualities to behave properly. It should only be set to values that came from the state property itself. To initialize the random number generator with arbitrary input, use :ref:`seed<class_RandomNumberGenerator_property_seed>` instead.
  89. \ **Note:** The default value of this property is pseudo-random, and changes when calling :ref:`randomize<class_RandomNumberGenerator_method_randomize>`. The ``0`` value documented here is a placeholder, and not the actual default seed.
  90. .. rst-class:: classref-section-separator
  91. ----
  92. .. rst-class:: classref-descriptions-group
  93. Method Descriptions
  94. -------------------
  95. .. _class_RandomNumberGenerator_method_randf:
  96. .. rst-class:: classref-method
  97. :ref:`float<class_float>` **randf** **(** **)**
  98. Returns a pseudo-random float between ``0.0`` and ``1.0`` (inclusive).
  99. .. rst-class:: classref-item-separator
  100. ----
  101. .. _class_RandomNumberGenerator_method_randf_range:
  102. .. rst-class:: classref-method
  103. :ref:`float<class_float>` **randf_range** **(** :ref:`float<class_float>` from, :ref:`float<class_float>` to **)**
  104. Returns a pseudo-random float between ``from`` and ``to`` (inclusive).
  105. .. rst-class:: classref-item-separator
  106. ----
  107. .. _class_RandomNumberGenerator_method_randfn:
  108. .. rst-class:: classref-method
  109. :ref:`float<class_float>` **randfn** **(** :ref:`float<class_float>` mean=0.0, :ref:`float<class_float>` deviation=1.0 **)**
  110. Returns a `normally-distributed <https://en.wikipedia.org/wiki/Normal_distribution>`__ pseudo-random number, using Box-Muller transform with the specified ``mean`` and a standard ``deviation``. This is also called Gaussian distribution.
  111. .. rst-class:: classref-item-separator
  112. ----
  113. .. _class_RandomNumberGenerator_method_randi:
  114. .. rst-class:: classref-method
  115. :ref:`int<class_int>` **randi** **(** **)**
  116. Returns a pseudo-random 32-bit unsigned integer between ``0`` and ``4294967295`` (inclusive).
  117. .. rst-class:: classref-item-separator
  118. ----
  119. .. _class_RandomNumberGenerator_method_randi_range:
  120. .. rst-class:: classref-method
  121. :ref:`int<class_int>` **randi_range** **(** :ref:`int<class_int>` from, :ref:`int<class_int>` to **)**
  122. Returns a pseudo-random 32-bit signed integer between ``from`` and ``to`` (inclusive).
  123. .. rst-class:: classref-item-separator
  124. ----
  125. .. _class_RandomNumberGenerator_method_randomize:
  126. .. rst-class:: classref-method
  127. void **randomize** **(** **)**
  128. Sets up a time-based seed for this **RandomNumberGenerator** instance. Unlike the :ref:`@GlobalScope<class_@GlobalScope>` random number generation functions, different **RandomNumberGenerator** instances can use different seeds.
  129. .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`
  130. .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)`
  131. .. |vararg| replace:: :abbr:`vararg (This method accepts any number of arguments after the ones described here.)`
  132. .. |constructor| replace:: :abbr:`constructor (This method is used to construct a type.)`
  133. .. |static| replace:: :abbr:`static (This method doesn't need an instance to be called, so it can be called directly using the class name.)`
  134. .. |operator| replace:: :abbr:`operator (This method describes a valid operator to use with this type as left-hand operand.)`
  135. .. |bitfield| replace:: :abbr:`BitField (This value is an integer composed as a bitmask of the following flags.)`