AK2Sのプログラム日記

フリーランスプログラマのプログラムに関する日記です

乱数生成方法

どうも~こんばんは、AK2Sです!

今日は乱数の生成についてブログを書こうと思います。

 

皆さんは乱数を使用する時、何を使用してますでしょうか?

  1. UnityEngine.Random
  2. Sytem.Random

Unityを使用していると、このどっちかになりますよね?

 

基本的にこの2つで乱数について普段はカバー出来ると思いますが

実行速度を気にする時はこの2つの乱数では遅いと思います。

(うちはコンシューマー開発していた経験があるため気にしてます…

 

そこで今回ご紹介するのがXorRandomについてです!

 


 XorRandomとはなんぞ?(Wikipediaより)

正確にはXorshiftを使用した擬似乱数生成法の1つ。

George Marsagliaが2003年に提案した。演算が排他的論理和ビットシフトのみであるため高速であるなどの特徴がある。


 

上記のような特徴があります。

そこで実際にうちが使用しているXorRandomのクラスを使用して実行結果を計測してみたいと思います。

 

 

計測結果はResultを見ての通り!

速度は SytemRandom > UnityRandom > XorRandom

とXorRandomが一番早い結果に。(結構速度差が出たな(;´Д`)

 

さてさて、気になる平均値をそれぞれ1000回ループして計測してみました

f:id:AK2S:20160925221015j:plain

結構平均的に取れましたかね…?

試行回数増やせばもうちょっと50に近づいて来るでしょう。

 

実際にうちが使用しているXorRandomクラスをGitHubにアップしてますので興味があれば見てみてください(*´ω`*)

https://github.com/AK2S/AKLib/blob/master/Assets/AKLib/XorRandom.cs

 

間違っている部分があればご指摘くださいm(_ _)m

 

それでは乱数生成方法についてはここまで!

それでは良いプログラミングライフを!(∩´∀`)∩ワーイ