最終更新日時(UTC):
が更新

履歴 編集

concept
<random>

std::uniform_random_bit_generator(C++20)

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;
    };
}

概要

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::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

処理系

関連項目

参照