【ソフトウェア開発】一様乱数から正規乱数を作る


先月の日経ソフトウェアに載っていた一様乱数から正規乱数を作る方法が良かったのでメモメモ。

記事ではJavaを使った作り方が書いていましたが、C#で同じようなことを行ってみました。

以下が作ったコードになります。

using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace RandomTest
{
class Program
{
	static void Main(string[] args)
	{
		// 起動時間をシード値として利用する(インクリメントしているのはお約束だから)
		int seed = Environment.TickCount;
		System.Random r = new System.Random(seed++);
		//Excelで分析しやすいようにCSVファイルとして出力する
		StreamWriter writer = new StreamWriter("result.csv");
		for (int i = 0; i < 1000000; i++)
		{
			writer.WriteLine(randomGaussian(r).ToString());
		}
	}
	public static double randomGaussian(Random r)
	{
		double avg = 0;
		for (int i = 0; i < 10; i++)
		{
			// 0~9の乱数を加算する
			avg += r.Next(10);
		}
		avg -= 45;
		return avg;
		}
	}
}

この結果をExcelの「分析ツール」 ⇒ 「ヒストグラム」で処理すると以下のようなグラフになり、正規分布になっていることが分かります。

Histogram

計算処理が少しかかるので、リアルタイム性を求めるものには不向きだと思いますが、例えばシミュレーションRPGなどのゲームのダメージ計算に用いると面白いかもしれませんね。
マイナス値でダメージ減少、プラス値でダメージ増加。普段は中央付近の値しか出ないので基本値+-0に近い値になるとか。


Mask_Siva

北の試される大地に生息しているSEです。
楽しみながらプログラムを作ったり、ゲームで遊んだりしています。

コメントをお待ちしております

HTMLタグは利用できません


新品/中古ゲーム販売 通販ショップの駿河屋

本鯖運営維持のため、上記リンクから注文してもらえると助かります~

仮面被り過ぎ@コンプレックス大佐
@Mask_Siva

  • #ロマサガ3 の次の遊び方決めました。 ~某貴族な方々とコマンダーモードで運命の旅をする~ -パーティ- サラ、ロビン、トーマス、フルブライト、ブラック、(少年) ↓縛り↓ ・基本はコマンダーモードのみ ・サラと少年以外は弓を装備する ・術は封印
    about 1日 ago
  • 今日はリラックスするために弦楽四重奏を中心に音楽に浸っています。 一昨年あたりに音響周りを整備した甲斐がある。 良い音出してくれるわ!
    about 1日 ago
  • 先日急に連絡してきた叔母と改めて色々話をしました。 状況は色々と把握でき、父方への不信感が増しましたね。
    about 1日 ago

BGMにどうぞ

機動戦士ガンダムUC オリジナルサウンドトラック

2 UNICORN -澤野弘之

↓の再生ボタンで再生できます
もっと楽曲を試聴したいなら
>>>こちら<<<
2017年6月
« 5月  
 123
45678910
11121314151617
18192021222324
252627282930 

アーカイブ

↓応援おねがいします!↓

ブログランキング・にほんブログ村へ