From 222a7f19b75388b0c07b339ada198eb8fe5b9b15 Mon Sep 17 00:00:00 2001 From: Marshall Lochbaum Date: Thu, 19 Aug 2021 07:55:22 -0400 Subject: =?UTF-8?q?Specify=20=E2=80=A2MakeRand=20and=20=E2=80=A2rand?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/spec/system.html | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'docs/spec/system.html') diff --git a/docs/spec/system.html b/docs/spec/system.html index 76d36a2f..477f32b4 100644 --- a/docs/spec/system.html +++ b/docs/spec/system.html @@ -446,3 +446,31 @@

The Unix epoch is 1970-01-01 00:00:00 UTC. β€’UnixTime is intended for absolute time measurement and should be implemented with the method that gives the most accurate result at any given time. β€’MonoTime is intended for relative measurement and should use the method that gives the most precise time differences over the course of the program. Its return value must never decrease between calls.

β€’_timed returns the total time taken divided by the number of function calls (𝕨 if provided and 1 otherwise), including the overhead required for the outer loop that counts iterations (which will typically be negligible in comparison to the BQN code).

More accurately the modifier β€’_maxTime_ may fail if execution of 𝔽 takes over 𝕨𝔾𝕩 seconds, and should fail as quickly as it is practically able to. The most likely way to implement this modifier is to interrupt execution at the given time. If 𝔽 completes before the interrupt there is no need to measure the amount of time it actually took.

+

Random generation

+

β€’MakeRand initializes a deterministic pseudorandom number generator with seed value 𝕩. β€’rand, if it exists, is a globally accessible generator initialized at first use. A random generator has the following member functions:

+ + + + + + + + + + + + + + + + + + + + + +
NameSummary
RangeAn array of shape π•¨βŠ£βŸ¨βŸ© selected from ↕𝕩
DealA simple random sample of π•¨βŠ£π•© elements of ↕𝕩
SubsetA sorted SRS of 𝕨 elements of ↕𝕩
+

For each of these functions, 𝕩 is a natural number. For Range, 𝕨 must be a valid shape if given, and for Deal and Subset it's a natural number less than or equal to 𝕩. All selections are made uniformly at random, that is, each possible result is equally likely. A simple random sample (SRS) of k elements from list s is a list of k distinct elements of s in any order. Both the choice of elements and their ordering must be uniformly random. Recommended algorithms for SRS selection are variants of a partial Knuth shuffle.

+

When 𝕨 isn't given, Deal's result contains all elements of ↕𝕩, making it a random shuffle of those values, or random permutation. In Subset, setting 𝕨 to 𝕩 would instead always result in the list ↕𝕩; because this is not useful, 𝕨 must be provided.

+

In Range, 𝕩 may be 0. In this case the result consists of floating-point numbers in the unit interval from 0 to 1. The numbers should have an overall uniform distribution, but their precision and whether the endpoints 0 and 1 are possible may depend on the implementation.

+

Ranges up to 2⋆32 must be supported (that is, a maximum integer result of (2⋆32)-1) if the number system accommodates it. In implementations based on double-precision floats it's preferable but not required to support ranges up to 2⋆53.

-- cgit v1.2.3