HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
0401
T.T乱数の謎!?4解決


T.T

リンク

2014/4/1(Tue) 20:38:03|NO.61190

以下のソースを実行してみてください。

パターン①

randomize repeat 1000 x=rnd(640):y=rnd(480) boxf x,y,x+10,y+10 await 1 loop

パターン②
     
repeat 10000 x=rnd(640):y=rnd(480) boxf x,y,x+10,y+10 await 1 loop

パターン③
     
repeat 10000 randomize x=rnd(640):y=rnd(480) boxf x,y,x+10,y+10 await 1 loop

気になるのはパターン③です。
randomizeをあの場所に入れると斜めしましま模様になります。

パターン①=パターン②にならないのも不思議です。

randomizeを入れる場所によって何か違うのでしょうか...



この記事に返信する


T.T

リンク

2014/4/1(Tue) 20:39:34|NO.61191

訂正
>パターン①=パターン②にならないのも不思議です。

パターン①=パターン③にならないのも不思議です。

すみませんでした。



葡萄色

リンク

2014/4/1(Tue) 20:59:16|NO.61193

>パターン①=パターン③にならないのも不思議です。
randomize命令は乱数のパターンを初期化する命令です。
①ではループに入る前に1回だけ初期化しているのに対し、
③ではループ内にあるためループする回数分、一々乱数のパターンを初期化していることになります。

③の方法は無意味なのでお勧めできません。

乱数系命令の中身の処理を知らないので何とも言えませんが、おそらく③が縞々模様になるのも、毎回randomize命令を実行しているからではないでしょうか。



check

リンク

2014/4/1(Tue) 20:59:40|NO.61194

>パターン①=パターン②にならない
乱数の初期シード値を2では使用しているため。

>パターン①=パターン③にならない
毎回シード値を変更しているため。



kanahiron

リンク

2014/4/1(Tue) 21:04:32|NO.61195

まず乱数を作るにはそれの元になるデータが必要です(初期シードといいます)
そのデータを作るのがrandomizeです
randomizeを使わないと初期シードは0だと思います(randomize 0 とは別)
randomizeの引数を省略すると現在のPCの時間が初期シードとして使われます

パターン3はその初期シードがPC時間のために、一定周期で呼び出されるrandomizeが
法則性をもった初期シードを作り結果として乱数も法則性を持つものと思います


randomize repeat 10000 randomize 4 x=rnd(640):y=rnd(480) boxf x,y,x+10,y+10 loop
とすると一万回発生される乱数が完全に同じなのはご存知でしょうか?
randomizeで引数を指定しているため初期シードは毎回同じになり、
同じ初期シードから作られる乱数も完全に同じになります



ONION software Copyright 1997-2025(c) All rights reserved.