83 lines
4.0 KiB
Markdown
83 lines
4.0 KiB
Markdown
[rand.req.seedseq]
|
||
|
||
# 29 Numerics library [[numerics]](./#numerics)
|
||
|
||
## 29.5 Random number generation [[rand]](rand#req.seedseq)
|
||
|
||
### 29.5.3 Requirements [[rand.req]](rand.req#seedseq)
|
||
|
||
#### 29.5.3.2 Seed sequence requirements [rand.req.seedseq]
|
||
|
||
[1](#1)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/numerics.tex#L1638)
|
||
|
||
A [*seed sequence*](#def:seed_sequence "29.5.3.2 Seed sequence requirements [rand.req.seedseq]") is an object
|
||
that consumes a sequence
|
||
of integer-valued data
|
||
and produces a requested number
|
||
of unsigned integer values i, 0â¤i<232,
|
||
based on the consumed data[.](#1.sentence-1)
|
||
|
||
[*Note [1](#note-1)*:
|
||
|
||
Such an object provides a mechanism
|
||
to avoid replication of streams of random variates[.](#1.sentence-2)
|
||
|
||
This can be useful, for example, in applications
|
||
requiring large numbers of random number engines[.](#1.sentence-3)
|
||
|
||
â *end note*]
|
||
|
||
[2](#2)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/numerics.tex#L1653)
|
||
|
||
A class S meets the requirements
|
||
of a seed sequence
|
||
if the expressions shown
|
||
in Table [126](#tab:rand.req.seedseq "Table 126: Seed sequence requirements") are valid and have the indicated semantics,
|
||
and if S also meets all other requirements
|
||
of [rand.req.seedseq][.](#2.sentence-1)
|
||
|
||
In Table [126](#tab:rand.req.seedseq "Table 126: Seed sequence requirements") and throughout this subclause:
|
||
|
||
- [(2.1)](#2.1)
|
||
|
||
T is the type named by S's associated result_type;
|
||
|
||
- [(2.2)](#2.2)
|
||
|
||
q is a value of type S and r is a value of type S or const S;
|
||
|
||
- [(2.3)](#2.3)
|
||
|
||
ib and ie are input iterators
|
||
with an unsigned integer value_type of at least 32 bits;
|
||
|
||
- [(2.4)](#2.4)
|
||
|
||
rb and re are mutable random access iterators
|
||
with an unsigned integer value_type of at least 32 bits;
|
||
|
||
- [(2.5)](#2.5)
|
||
|
||
ob is an output iterator;
|
||
and
|
||
|
||
- [(2.6)](#2.6)
|
||
|
||
il is a value of type initializer_list<T>[.](#2.sentence-2)
|
||
|
||
Table [126](#tab:rand.req.seedseq) — Seed sequence requirements [[tab:rand.req.seedseq]](./tab:rand.req.seedseq)
|
||
|
||
| [ð](#tab:rand.req.seedseq-row-1)<br>**Expression** | **Return type** | **Pre/post-condition** | **Complexity** |
|
||
| --- | --- | --- | --- |
|
||
| [ð](#tab:rand.req.seedseq-row-2)<br>S::result_type | T | T is an [unsigned integer type](basic.fundamental#def:type,unsigned_integer "6.9.2 Fundamental types [basic.fundamental]") of at least 32 bits[.](#tab:rand.req.seedseq-row-2-column-3-sentence-1) | |
|
||
| [ð](#tab:rand.req.seedseq-row-3)<br>S() | | Creates a seed sequence with the same initial state as all other default-constructed seed sequences of type S[.](#tab:rand.req.seedseq-row-3-column-3-sentence-1) | constant |
|
||
| [ð](#tab:rand.req.seedseq-row-4)<br>S(ib,ie) | | Creates a seed sequence having internal state that depends on some or all of the bits of the supplied sequence [ib,ie)[.](#tab:rand.req.seedseq-row-4-column-3-sentence-1) | O(ieâib) |
|
||
| [ð](#tab:rand.req.seedseq-row-5)<br>S(il) | | Same as S(il.begin(), il.end())[.](#tab:rand.req.seedseq-row-5-column-3-sentence-1) | same as S(il.begin(), il.end()) |
|
||
| [ð](#tab:rand.req.seedseq-row-6)<br>q.generate(rb,re) | void | Does nothing if rb == re[.](#tab:rand.req.seedseq-row-6-column-3-sentence-1)<br>Otherwise, fills the supplied sequence [rb,re) with 32-bit quantities that depend on the sequence supplied to the constructor and possibly also depend on the history of generate's previous invocations[.](#tab:rand.req.seedseq-row-6-column-3-sentence-2) | O(reârb) |
|
||
| [ð](#tab:rand.req.seedseq-row-7)<br>r.size() | size_t | The number of 32-bit units that would be copied by a call to r.param[.](#tab:rand.req.seedseq-row-7-column-3-sentence-1) | constant |
|
||
| [ð](#tab:rand.req.seedseq-row-8)<br>r.param(ob) | void | Copies to the given destination a sequence of 32-bit units that can be provided to the constructor of a second object of type S, and that would reproduce in that second object a state indistinguishable from the state of the first object[.](#tab:rand.req.seedseq-row-8-column-3-sentence-1) | O(r.size()) |
|