std::generate_canonical
Von cppreference.com
| Definiert in Header <random> |
||
| template< class RealType, std::size_t Bits, class Generator > RealType generate_canonical( Generator& g ); |
(seit C++11) | |
Generiert eine zufällige Gleitkommazahl im Bereich [0, 1).
Um genügend Entropie zu generieren, wird generate_canonical() genau k Mal g() aufrufen, wobei k = max(1, ⌈ b / log2 R ⌉) und
- b = std::min(Bits, std::size_t {std::numeric_limits<RealType>::digits}),
- R = g.max() - g.min() + 1.
Inhalt |
[edit] Parameter
| g | - | zu verwendender Generator zur Entropiegewinnung |
[edit] Rückgabewert
Gleitkommazahl im Bereich [0, 1).
[edit] Ausnahmen
Keine, außer denen, die von g ausgelöst werden.
[edit] Anmerkungen
Einige bestehende Implementierungen haben einen Fehler, der gelegentlich 1.0 zurückgeben kann, wenn RealType float ist GCC #63176 LLVM #18767 MSVC STL #1074. Dies ist LWG Issue 2524.
[edit] Beispiel
Zufallszahlen mit 10 Bit Zufälligkeit erzeugen: Dies kann nur k * R verschiedene Werte ergeben.
Führen Sie diesen Code aus
#include <iostream> #include <random> int main() { std::random_device rd; std::mt19937 gen(rd()); for (int n = 0; n < 10; ++n) std::cout << std::generate_canonical<double, 10>(gen) << ' '; std::cout << '\n'; }
Mögliche Ausgabe
0.208143 0.824147 0.0278604 0.343183 0.0173263 0.864057 0.647037 0.539467 0.0583497 0.609219
[edit] Siehe auch
| (C++11) |
erzeugt reelle Werte, die gleichmäßig über einen Bereich verteilt sind (Klassenschablone) |