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

わんくま同盟

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

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


(過去ログ 18 を表示中)
■7154 / )  Re[16]: Long型の乱数を生成する自作クラスをつくりたい
□投稿者/ 魔界の仮面弁士 (397回)-(2007/08/30(Thu) 23:21:57)
2007/08/30(Thu) 23:33:16 編集(投稿者)
No7124 (れい さん) に返信
>> Dim b() As Byte = BitConverter.GetBytes(0UL)
> これは、魔界の仮面弁士さんのポリシーでしょうか?

私も、普段は使いません。(^^;
サンプルですので、可読性を優先させたが故の結果です。

# かえって分かりにくいという人もいるでしょうから、
# 可読性というと語弊があるかも知れませんけれども。


> Dim b(8) As Byteでは遅いのかな?
> この心を是非教えてください。

そういった間違いを防ぐ目的もあります。8 ではないですよね。


=======

で。昔からの VB 使いとしては、いにしえの「Rnd 関数」時代に使われていた
  randomvalue = CInt(Int((upperbound - lowerbound + 1) * Rnd() + lowerbound))
の方式を用いて、こんなのとか。速度面は度外視。



Public Class LongRandom

    Private _Random As New System.Random()

    Public Function [Next](ByVal min As Long, ByVal max As Long) As Long
        If min = max Then Return min
        If min > max Then Throw New ArgumentOutOfRangeException()

        Dim dMin As Decimal = CDec(min)
        Dim dMax As Decimal = CDec(max)
        Dim dRnd As Decimal = Sample()

        '標準の Next 仕様:「Min以上 Max 未満」
        Return CLng(Int(dMin + dRnd * (dMax - dMin)))

        '「Min以上 Max 以下」ならこっち
        'Return CLng(Int(dMin + dRnd * (dMax - dMin + 1D)))
    End Function

    Private Function Sample() As Decimal
        Dim iHi As Integer = _Random.Next(0, 1000000000)
        Dim iLo As Integer = _Random.Next(0, 1000000000)
        Dim s As String = String.Format("0.{0:000000000}{1:000000000}", iHi, iLo)

        ' 0以上1未満の値を返す
        Return Decimal.Parse(s)
    End Function
End Class

返信 編集キー/


管理者用

- Child Tree -