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