C言語/乱数

出典: フリー教科書『ウィキブックス(Wikibooks)』
ナビゲーションに移動 検索に移動

乱数を生成する[編集]

C言語[編集]

#include <stdlib.h>
#include <stdio.h>
int main(void) {
  // 乱数の初期化
  srand(time(NULL));
  // 1から6の乱数を生成
  const int r = rand() % 6 + 1;
  
  int in;
  print("1から6の数を入力してください:");
  scanf("%d", &in);
  print("\n");
  if (r == in) {
    puts("当たり⭕");
  } else {
    puts("ハズレ❌");
  }
  
  return 0;
}

C++[編集]

#include <iostream>
#include <cstdlib>

int main() {
  // 乱数の初期化
  std::srand(std::time(NULL));
  // 1から6の乱数を生成
  const int r = std::rand() % 6 + 1;
  
  int in;
  std::cout << "1から6の数を入力してください:";
  std::cin >> in;
  std::cout << std::endl;
  
  if (r == in) {
    std::cout << "あたり⭕";
  } else {
    std::cout << "ハズレ❌";
  }
  
  std::cout << std::endl;
  return 0;
}

rand/std::randの問題点[編集]

  • 0からRAND_MAXまでの一様分布のみを生成する
  • 線形合同法により生成することがある
  • 周期が

回避策:

  • ライブラリを使用する
  • (C++): std::randomやメルセンヌ・ツイスタ法による乱数生成を行うstd::mt19937std::mt19937_64を使用する