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

わんくま同盟

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

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


(過去ログ 18 を表示中)
■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型が出てきてしまいます。
最低でも後二桁必要です。
解決済み
返信 編集キー/


管理者用

- Child Tree -