C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 18 を表示中)
■6994 / )  Long型の乱数を生成する自作クラスをつくりたい
□投稿者/ ぼのぼの (72回)-(2007/08/28(Tue) 15:26:55)

分類:[.NET 全般] 

こんにちは。

業務上どうしても必要ってわけでもなく、勉強目的なのでぜんぜんいそぎでも重要でもないのですが、
引数で最小値と最大値を受け取ってLong型の乱数を返すメソッドを作りたいと思っています。
#当方の開発環境はVS2005で、言語はVBかC#のどちらかで考えてます。

Int32型ならSystem.RandomクラスのNextメソッドで取得できますが、
これだと最小値と最大値の範囲が-2,147,483,648〜2,147,483,647になってしまうので、
扱える範囲をInt64の-9,223,372,036,854,775,808〜9,223,372,036,854,775,807に拡張したいのです。

まず、Int32の範囲を超える乱数を取得する方法としては、
Int32の乱数2つを文字列として繋ぎ合わせる方法、
System.Random.NextDoubleの結果に10のべき乗をかける方法、
System.Random.NextBytesで生成したバイト列から変換する方法、
などが考えられます。

次に、入力パターンとしては、
最小値、最大値共にInt32の範囲内に収まっている場合、
最小値がInt32.MinValueより小さく最大値がInt32.MaxValueより小さい正の数の場合、
最小値、最大値共にInt32.MaxValueより大きい場合、
などなどいくつかのパターンに分けられます。
#要は正か負か、Int32の範囲に収まっているかいないかの組み合わせですね。

これらの組み合わせで、偏らない整数を高速に次々と生成するアルゴリズムとしては、
どんな方法がベストかな〜と1人考えてたら脳が煮えてきたので、スレッドを作ってみました。

自分でも引き続き考えてみますが、もし良いアイデアなどありましたらご意見ください。
よろしくお願いします。
返信 編集キー/


管理者用

- Child Tree -