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


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
0714
ケジメrnd関数でエラーが出ます6解決


ケジメ

リンク

2007/7/14(Sat) 04:47:21|NO.9494

誰か分かる方教えてください HSP3.0です

rnd関数実行時に「0で除算しました」というエラーが出ます

randomize a = rnd(10)
色々なHP等を見て調べてもこのエラーは載ってませんでした



この記事に返信する


f

リンク

2007/7/14(Sat) 06:32:43|NO.9495

0除算はrndの所では出てないんでね?

rndの所にカーソル合わせてf1キー押せば出てくる説明読んで、
aがどういう数字になるか確認してみ?

ちなみに、除算とは「割り算」の事よ?



xxxa

リンク

2007/7/14(Sat) 07:05:48|NO.9496

a=rnd(0)なら「0で除算しました」とでるけれど
提示されたスクリプトは問題なさそう。

再インストールをすれば直るかも



f

リンク

2007/7/14(Sat) 08:09:57|NO.9498

>a=rnd(0)なら「0で除算しました」とでるけれど

・・・本当だ・・・。知らんかった・・・。



ケジメ

リンク

2007/7/14(Sat) 15:25:17|NO.9508

問題解決しました

fさん xxaさん教えて下さってありがとうございます

hsp261cmp.asのこの部分をコメントアウトすれば正常に動くようになりました

//#undef rnd //#define rnd(%1,%2) %1=rnd@hsp(%2)
未だに原因は分かりません



f

リンク

2007/7/14(Sat) 17:03:30|NO.9509

・・・・・。

ソレダ(笑

a = rnd(10)

と書いたのが、#dfineのせいで

a = 10 =rnd(0)

になったからだ(笑

hsp261cmp.asを使うなら、HSP2.6の書き方で記述しないと駄目だ。



Shinya

リンク

2007/7/14(Sat) 17:04:06|NO.9510

大体の乱数は、「線形合同法」という方法で作成した擬人乱数です。詳しくは検索して調べてください。
rnd(x)の「線形合同法」は適当な値を x で割り、その余りを最終的な乱数とします。

a = ある数 \ x

a の区間は [0, x-1]
#module
#defcfunc _rnd int n, local a, local c, local m ; 8で割って5余る数 a = 8 * 10 + 5 ; 奇数 c = 47 ; 2の累乗(大きめにとると周期が延びる) m = 2 << 16 x = (a*x + c) \ m return x \ n ; ← 乱数を 0 ≦ _rnd(n) ≦ n-1 にする #global title "赤 = rnd(x) , 青 = _rnd(x)" repeat 64 a = rnd(101) color 255, 0, 0 : boxf 10*cnt, 240, 10*cnt+5, 2.4*a a = _rnd(101) color 0, 0, 255 : boxf 10*cnt, 480, 10*cnt+5, 240+2.4*a loop
上のプログラムから分かるように、rnd(x) は余りを出すために割り算を行うので rnd(x) のパラメータに 0 は指定できません。



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