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-2023(c) All rights reserved.