| ■7197 / ) |
Re[17]: Long型の乱数を生成する自作クラスをつくりたい |
□投稿者/ れい (94回)-(2007/08/31(Fri) 17:40:54)
|
2007/08/31(Fri) 17:41:52 編集(投稿者)
■No7154 (魔界の仮面弁士 さん) に返信 > ■No7124 (れい さん) に返信 > >> Dim b() As Byte = BitConverter.GetBytes(0UL) >>これは、魔界の仮面弁士さんのポリシーでしょうか? > > 私も、普段は使いません。(^^; > サンプルですので、可読性を優先させたが故の結果です。 >>Dim b(8) As Byteでは遅いのかな? >>この心を是非教えてください。 > > そういった間違いを防ぐ目的もあります。8 ではないですよね。
おぉ。 VBはここで7なんでした。 やはりVBは難しい。 C++から脳内変換で頑張るのはいい加減無理があるなぁ。
> '標準の Next 仕様:「Min以上 Max 未満」 > Return CLng(Int(dMin + dRnd * (dMax - dMin))) > > '「Min以上 Max 以下」ならこっち > 'Return CLng(Int(dMin + dRnd * (dMax - dMin + 1D)))
そうそう。 忘れてましたが、私も最初違和感を感じてました。 普通は「未満」ですよね。 でないと変換がめんどくさい。
> 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)
小数点以下18桁の精度で、0以上1未満のDecimalを作っています。 一方、Long型は約19桁の整数です。 ですので、
> Return CLng(Int(dMin + dRnd * (dMax - dMin)))
この変換で精度が足りていません。 これでは乱数として得られないLong型が出てきてしまいます。 最低でも後二桁必要です。
|
解決済み
|