|
分類:[.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人考えてたら脳が煮えてきたので、スレッドを作ってみました。
自分でも引き続き考えてみますが、もし良いアイデアなどありましたらご意見ください。 よろしくお願いします。
|