0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

毎日C言語 6日目 線形合同法

Last updated at Posted at 2020-06-25

今日(2020/06/20)からアルゴリズムを勉強していこうと思う。選ばれたのはC言語です。理由は単純で今勉強中だから。メモ用として使っていくので詳しい解説はしない(というか知識がないからできない)。よく参考書にあるような数字の計算から始めるわけではないのでそこは理解していただきたい。では早速やっていこう。

環境構築に関しては以下の記事を参考にして構築した。(Windows)
※Macはわかりませんので各自で調べてください。
https://webkaru.net/clang/mingw-gcc-environments/

使用している書籍:C言語によるはじめてのアルゴリズム入門
著者:河西朝雄

#線形合同法
前回モンテカルロ法を実施したときに乱数が線形合同法で作成されているということを知ったので今回は線形合同法について書いていく。

簡単に説明すると漸化式を使用して乱数を生成している。漸化式は以下の通り。

x_{n} = (Ax_{n-1} + C) (mod M)
random.c
#include <stdio.h>

// x0を定義している
unsigned int first_num = 13;
int index = 0;

unsigned rnd(void){
    // 漸化式のx1を求めている
    // 今回はAを109,Cを1021,Mを32768と設定している
    first_num = (first_num*109+1021)%32768;
    return first_num;
}

int main(void){
    int j;
    for(j = 0;j<100;j++){
        printf("%8d",rnd());
        index++;
        if(index % 5 == 0){
            printf("\n");
        }
    }

}

#出力結果

   4965   15869   13781     237   30021
   14557   16821   21965    2853   18365
   16789   32429   21765   27293   13685
   31629   21221    8573    7509   19565
    1221   27741   31029   29005   27301
   19261   18709   27181    1157   15901
    3317   14093   21093   17661   17621
   22509   21573   24541   28853   19661
    2597    3773    4245    5549   29701
   20893    9333   12941    4581   10365
   11349    9069   25541    4957   10293
   26701   27045    4669    6165     301
    9093    9501   31733   28173    4453
   19453   21461   12013   13125    1757
    8117   17357    2341   21949   24469
   11437    4869   14493    4981   27021
   20709   12157   15189   31341   17093
   14941   22325   24397   26789   22845
   26389    6189   17029    3101   27381
    9485   20581   21245   25301    1517

#まとめ
今回作成した関数のmodのMはRAND_MAXに対応しているのかなと思った。また、変数や関数の命名が下手なのでもっとわかりやすい変数名を付けれるようになりたい。アドバイスなどがあれば是非コメントお願いします!

0
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?