みろりHP


緑色さんの多目的ブログ
みろりえいちぴー
ごゆるりとおくつろぎあさーせ。
<< アコギ Mr.Big『To Be With You』 | main | Paul Graham『ハッカーと画家』 >>
| カテゴリ:プログラミング |
C# Python 乱数生成ノート



C#の乱数生成はシード値を自分で設定しないといけないってのが新鮮だったぜ。



範囲指定(startからend-1まで)で乱数を取り出す関数。
private int get_random_number(int start, int end, int seed)
{
    var random = new System.Random(seed);
    return random.Next(start, end);
}
これを一回だけ実行するんならシンプルなんだが、seedが同じだと毎回おんなじ結果がでちまうので、なんべんも同時に実行する場合はseedを毎回変える必要がある。たとえば100回サイコロを振る処理はこう。
// seedの初期値を「プログラム開始からのミリ秒数」とする
int seed = Environment.TickCount;

// 出目の記録用カウンター
var arr = new int[] { 0, 0, 0, 0, 0, 0 };

// 1回振るたびにseedに1足していく
for (int i = 0; i < 100; i++)
{
    int dice = get_random_number(0, 6, seed + i);
    arr[dice]++;
}

// 結果を表記
Console.WriteLine("{0}, {1}, {2}, {3}, {4}, {5}",
    arr[0], arr[1], arr[2], arr[3], arr[4], arr[5]);
結果は以下。
16, 19, 16, 15, 18, 16
一様分布になってるので意図通りだ。オーケイ。



で、pyてょんちゃんで同じことするとこう。
import random
lis = [0,0,0,0,0,0]
for i in range(100):
    lis[random.randint(0,5)] += 1
print(lis)
震えるほどシンプルだ。randintの出目は第二引数を含むってとこがポイントかな。で結果は。
[16, 24, 14, 12, 16, 18]
って、アレ? なんだかC#よりもバラつきが大きい気がする。最小値と最大値で二倍の差がある。試しに10000回実行して、出目と割合を見てみた。
# 出目
[1653, 1682, 1618, 1697, 1660, 1690]
# 割合
[0.1653, 0.1682, 0.1618, 0.1697, 0.166, 0.169]
あ、これなら一様といっていいかも。C#は少数の実行でもきちんとバラけて、Pythonはそうでもない、と。言語によって乱数生成のアルゴリズムが違うってことを目の当たりにできたぜ。


| 緑色 | プログラミング | comments(0) |
| カテゴリ:- |
スポンサーサイト
| スポンサードリンク | - | - |









     12
3456789
10111213141516
17181920212223
24252627282930
<< September 2017 >>
+ みろりHP内検索
+ 閲覧記事
+ 過去記事アーカイブ
+ カテゴリ
+ 年月選択
  • 2017年 09月 (3)
  • 2017年 08月 (6)
  • 2017年 07月 (8)
  • 2017年 06月 (4)
  • 2017年 05月 (7)
  • 2017年 04月 (8)
  • 2017年 03月 (7)
  • 2017年 02月 (10)
  • 2017年 01月 (6)
  • 2016年 12月 (8)
  • 2016年 11月 (8)
  • 2016年 10月 (5)
  • 2016年 09月 (5)
  • 2016年 08月 (7)
  • 2016年 07月 (9)
  • 2016年 06月 (6)
  • 2016年 05月 (8)
  • 2016年 04月 (10)
  • 2016年 03月 (10)
  • 2016年 02月 (8)
  • 2016年 01月 (9)
  • 2015年 12月 (9)
  • 2015年 11月 (6)
  • 2015年 10月 (5)
  • 2015年 09月 (4)
  • 2015年 08月 (8)
  • 2015年 07月 (5)
  • 2015年 06月 (3)
  • 2015年 05月 (7)
  • 2015年 04月 (8)
  • 2015年 03月 (12)
  • 2015年 02月 (8)
  • 2015年 01月 (4)
  • 2014年 12月 (5)
  • 2014年 11月 (5)
  • 2014年 10月 (7)
  • 2014年 09月 (4)
  • 2014年 08月 (7)
  • 2014年 07月 (6)
  • 2014年 06月 (4)
  • 2014年 05月 (12)
  • 2014年 04月 (9)
  • 2014年 03月 (6)
  • 2014年 02月 (6)
  • 2014年 01月 (8)
  • 2013年 12月 (7)
  • 2013年 11月 (10)
  • 2013年 10月 (10)
  • 2013年 09月 (9)
  • 2013年 08月 (11)
  • 2013年 07月 (10)
  • 2013年 06月 (9)
  • 2013年 05月 (15)
  • 2013年 04月 (11)
  • 2013年 03月 (5)
  • 2013年 02月 (7)
  • 2013年 01月 (6)
  • 2012年 12月 (9)
  • 2012年 11月 (10)
  • 2012年 10月 (10)
  • 2012年 09月 (4)
  • 2012年 08月 (2)
  • 2012年 07月 (7)
  • 2012年 06月 (13)
  • 2012年 05月 (13)
  • 2012年 04月 (15)
  • 2012年 03月 (4)
  • 2012年 02月 (12)
  • 2012年 01月 (9)
  • 2011年 12月 (5)
  • 2011年 11月 (13)
  • 2011年 10月 (2)
  • 2011年 09月 (2)
  • 2011年 08月 (1)
  • 2011年 06月 (1)
  • 2011年 05月 (4)
  • 2011年 04月 (10)
  • 2011年 03月 (8)
  • 2011年 02月 (11)
  • 2011年 01月 (14)
  • 2010年 12月 (14)
  • 2010年 11月 (17)
  • 2010年 10月 (17)
  • 2010年 09月 (19)
  • 2010年 08月 (22)
  • 2010年 07月 (18)
  • 2010年 06月 (16)
  • 2010年 05月 (19)
  • 2010年 04月 (15)
  • 2010年 03月 (22)
  • 2010年 02月 (18)
  • 2010年 01月 (18)
  • 2009年 06月 (2)
  • 2009年 04月 (1)
  • 2007年 12月 (10)
  • 2007年 11月 (7)
  • 2007年 10月 (9)
  • 2007年 09月 (4)
  • 2007年 07月 (5)
  • 2007年 06月 (11)
  • 2007年 05月 (6)
  • 2007年 04月 (4)
  • 2006年 01月 (20)
  • + ブックマーク
    + 最近のコメント
    + アクセスカウンター
    全体(since 2010.02.03.)
    今日… 昨日…