■ 現在のこのページの役立ち度:
表示されない場合こちらのリンクからもご覧になれます。
|
■ このページの役立ち度を評価する:
役立ち度を評価してください。
(1(左):あまり役立たない - 5(右):大変役立った): |
■ ページの共有: |
[ サイト内検索 ]
![]()
カスタム検索
|
#17003-0ランダム関数mi-ko2001-07-25(水) 14:28
#17004-0RE#17003:ランダム関数匿名170042001-07-25(水) 14:58
#17005-0RE#17003:ランダム関数たなか2001-07-25(水) 15:07
#17007-0RE#17003:ランダム関数よねKEN2001-07-25(水) 15:10
#17012-0RE#17003:ランダム関数Say2001-07-25(水) 18:30
#17004-0RE#17003:ランダム関数匿名170042001-07-25(水) 14:58
#17005-0RE#17003:ランダム関数たなか2001-07-25(水) 15:07
#17007-0RE#17003:ランダム関数よねKEN2001-07-25(水) 15:10
#17012-0RE#17003:ランダム関数Say2001-07-25(水) 18:30
mi-ko2001-07-25(水) 14:28
こんにちは、お世話になります。 VBで4桁の乱数を発生させたいのです。 聞くところによると、rand関数はなぜかランダムではない という話を聞きました。(その理由も知っている方がいらっしゃいましたら 教えてください) そもそも、VBに関数があるのでしょうか? 以上、よろしくお願いします。
匿名170042001-07-25(水) 14:58
> VBで4桁の乱数を発生させたいのです。 > 聞くところによると、rand関数はなぜかランダムではない > という話を聞きました。(その理由も知っている方がいらっしゃいましたら > 教えてください) Randomize を使えば OK > そもそも、VBに関数があるのでしょうか? n = Int(Rnd * 9000) + 1000
たなか2001-07-25(水) 15:07
ランダムでない理由は知りませんが、Randomizeを使えばバラバラになりますよ 4桁のランダム値は ret = Int(Rnd * 9000) + 1000 でよろしいかと…
よねKEN2001-07-25(水) 15:10
> VBで4桁の乱数を発生させたいのです。 こんな感じでどうでしょう。 Private Sub Form_Load() Dim i As Long Dim result(100) As Long Dim L As Long Randomize For i = 0 To 1000000 L = Int(Rnd * 9000) + 1000 result(L \ 100) = result(L \ 100) + 1 Next ' 例:reault(10)は1000〜1999の値の数です。 For i = 10 To 99 Debug.Print result(i) Next End Sub 乱数の分布のチェック付きです。 > 聞くところによると、rand関数はなぜかランダムではない Rnd関数ですね。 > という話を聞きました。(その理由も知っている方がいらっしゃいましたら > 教えてください) どういう観点でランダムではないという意見があるのかがわからないので なんとも言えません。 Rnd関数はそれなりに真っ当な乱数を生成していると思いますが。 ただし、Rnd関数をベースに計算した値を使用するので、 計算式によっては、乱数が片寄る場合はあります。
Say2001-07-25(水) 18:30
残念ながら、完全に不規則な数列を「計算で」求めることはできません。 VBに限らず、乱数関数によって作られる「乱数」は、実は循環周期のきわめて長い 循環数列です、いわゆる擬似乱数です。 乱数を作るアルゴリズムでしたら、線形合同法あたりが有名です。 せっかくですから、VBの乱数が規則的であるところを視覚的にお見せしましょう。 Formにボタン2つおいてください。 下記コードをコピーして実行します。 Command1をおしたら、点をばらまきますが、 Command2をおせば、あーらふしぎ・・・(やってのお楽しみ) rndは15桁の擬似乱数を作りますが、下位の桁ほど循環間隔が小さくなります。 Private Sub Command1_Click() Dim lngX As Long Dim lngY As Long Dim i As Long For i = 1 To 10000 lngX = Int(Rnd * 4096) lngY = Int(Rnd * 4096) Form1.PSet (lngX, lngY), RGB(255, 255, 255) Next End Sub Private Sub Command2_Click() Dim lngX As Long Dim lngY As Long Dim strX As String Dim strY As String Dim i As Long For i = 1 To 10000 strX = Format(Rnd * 1E+15, "000000000000000") strY = Format(Rnd * 1E+15, "000000000000000") strX = Right(strX, 4) strY = Right(strY, 4) lngX = CLng(strX) lngY = CLng(strY) Form1.PSet (lngX, lngY), RGB(255, 255, 255) Next End Sub Private Sub Form_Load() Form1.BackColor = RGB(0, 0, 0) ' End Sub
このページと関連する記事:
#692-3左側の0を取除くには?2002-05-31(金) 02:50#3102-0ランダムについて。1999-10-20(水) 22:22
#1028-0前に出たデータを除外するには?1999-08-21(土) 15:07
#2599-0INIファイルからの数値の読み込み2001-12-08(土) 09:24
#2599-3INIファイルからの数値の読み込み2001-12-08(土) 00:24
#17914-0ランダム2001-09-20(木) 14:39
#296-3VBで構造体をバイナリー保存したいのですが2003-08-07(木) 09:37
#60-2Cmmand Buttonの形状2003-04-22(火) 21:44
#5187-0フォームに計算結果を簡単なグラフとして表示したい!!2000-01-21(金) 12:02
#403-4オセロゲーム2003-11-30(日) 16:01
お探しの情報は見つかりましたか?お困りの問題は解決しましたか?
サイト内検索, 似た記事検索で見つからなくてもあきらめずに掲示板で質問してみましょう。
VB初心者友の会があなたのお役に立てれば幸いです。また、本ページの投稿者の方々にこの場を借りて感謝致します。
サイト内検索, 似た記事検索で見つからなくてもあきらめずに掲示板で質問してみましょう。
VB初心者友の会があなたのお役に立てれば幸いです。また、本ページの投稿者の方々にこの場を借りて感謝致します。
本ページは過去ログを集めて自動構成しています。よろしければこのページに関するフィードバックをお願いします。