Skip to content

Latest commit

 

History

History
96 lines (77 loc) · 3.09 KB

uniform_random_bit_generator.md

File metadata and controls

96 lines (77 loc) · 3.09 KB

uniform_random_bit_generator

  • random[meta header]
  • std[meta namespace]
  • concept[meta id-type]
  • cpp20[meta cpp]
namespace std {
  template<class G>
  concept uniform_random_bit_generator =
    invocable<G&> && unsigned_integral<invoke_result_t<G&>> &&
    requires {
      { G::min() } -> same_as<invoke_result_t<G&>>;
      { G::max() } -> same_as<invoke_result_t<G&>>;
      requires bool_constant<(G::min() < G::max())>::value;
    };
}
  • invocable[link /reference/concepts/invocable.md]
  • unsigned_integral[link /reference/concepts/unsigned_integral.md]
  • same_as[link /reference/concepts/same_as.md]
  • invoke_result_t[link /reference/type_traits/invoke_result.md]
  • bool_constant[link /reference/type_traits/bool_constant.md]

概要

uniform_random_bit_generatorは、任意の乱数生成器Gが離散一様分布を示す(取り得る出力範囲における各値の出現確率が一定であり符号なし整数型を返す)関数オブジェクトであることを表すコンセプトである。

モデル

Gのオブジェクトgについて以下の条件を満たす場合に限って、型Guniform_random_bit_generatorのモデルである

  • G::min() <= g()であること
  • g() <= G::max()であること
  • g()の時間/空間計算量は償却定数であること

#include <iostream>
#include <random>

template<std::uniform_random_bit_generator G>
void f(const char* name) {
  std::cout << name << " is uniform random bit generator" << std::endl;
}

template<typename G>
void f(const char* name) {
  std::cout << name << " is not uniform random bit generator" << std::endl;
}

int main() {
  f<std::mt19937>("std::mt19937");
  f<std::minstd_rand>("std::minstd_rand");
  f<std::ranlux48>("std::ranlux48");
  f<std::knuth_b>("std::knuth_b");
  f<std::random_device>("std::random_device");
  
  std::cout << "\n";
  f<std::uniform_real_distribution<>>("std::uniform_real_distribution<>");
  f<std::normal_distribution<>>("std::normal_distribution<>");
  f<std::exponential_distribution<>>("std::exponential_distribution<>");
}
  • std::uniform_random_bit_generator[color ff0000]

出力

std::mt19937 is uniform random bit generator
std::minstd_rand is uniform random bit generator
std::ranlux48 is uniform random bit generator
std::knuth_b is uniform random bit generator
std::random_device is uniform random bit generator

std::uniform_real_distribution<> is not uniform random bit generator
std::normal_distribution<> is not uniform random bit generator
std::exponential_distribution<> is not uniform random bit generator

バージョン

言語

  • C++20

処理系

関連項目

参照