06
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
   

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

線形合同法を2次元プロットしてみた

線形合同法が二次元に一様分布しないというのをチェックするためにこんなコードでテストしてみました
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace RandTest
{
    class Program
    {
        int x;
        int A = 214013,C = 2531011;
        int rand() { x = x * A + C; return (int)(x>>N) & mask; }

        const int N = 10;
        const int mask = ( 1 << N ) - 1;

        public Program()
        {
            using(Bitmap bmp = new Bitmap(1 << N,1 << N))
            {
                Graphics g = Graphics.FromImage(bmp);
                g.Clear(Color.Black);
                
                for(int i = 0; i < 1 << 22; i++)
                {
                    long x = rand() & mask;
                    long y = rand() & mask;

                    g.FillRectangle(Brushes.White,x,y,1,1);
                }
                g.Dispose();

                bmp.Save("out.png");
            }

            
        }

        static void Main( string[] args )
        {
            new Program();
        }
    }
}

そして結果がこちら
out.png
見りゃわかりますがめっちゃ偏ってます。 ちなみにN=16だとCのRandomの式だけどねそれだと二次元にはちゃんと分布しそうなので緩めてます。 ていうか2^32もプロットしたくねーです。
スポンサーサイト

Comment

Secret

検索フォーム

RSSリンクの表示

リンク

リンクというか個人的によく使うアルゴリズムの解説サイト… C#でなかったりする

ブロとも申請フォーム

この人とブロともになる

QRコード

QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。