ツムラ_メモ

大失敗を繰り返す。

乗算合同法についてのサンプルプログラム1。
適当。



<プログラムリスト>

//multiplicative congruential method
//jrand
#include<stdio.h>
#include<math.h>
int main(void){
        int set_n=50;   //数列nの初期値
        int set_b=17;   //周期の初期値b
        int cnt;        //カウンタ用の変数cnt
        int max_cnt=20; //出力最大数
        double x;
        int a=363;
        int m=pow(2,set_b);
        if(max_cnt>pow(2,set_b -2)){
                fprintf(stderr,"設定値が大きすぎます\n");
                return -1;
        }
        for(cnt=1;cnt<=max_cnt;cnt++){
                x=(double)set_n/m;
                printf("%f\n",x);
                set_n=(set_n*a) % m;
        }
        return 0;
}

混合合同法のサンプルプログラム1

//mixed congruential method
//krand
#include<stdio.h>
int main(void){
        int set_n=3;    //数列nの初期値
        int set_b=5;    //周期の初期値b
        int a=5;        //1 mod 4
        int c=3;        //cとmは互いに素
        int cnt;        //カウンタ用の変数cnt
        int m=pow(2,set_b);
        int max_cnt=20;
        if(max_cnt>m){
                fprintf(stderr,"設定値が大きすぎます\n");
            }   return -1;
        }   
        for(cnt=1;cnt<=max_cnt;cnt++){
                printf("%f\n",(double)set_n/m);
            }   set_n=(set_n*a+c) % m;
        }   
        return 0;
}