質問: rand() % 30000;//0~29,999の乱数を生成する...はず Wait(30000 + r);//30~60秒待つ...はず } } } } ...これを10~20秒に設定すると正確に動きます。 8回くらいテストしましたが、12~20秒の間でランダムに動きました。しかも、前後の動きは必ず1回だけです。 なぜ30~60秒にするとダメなのでしょうか? H8/36064のデータシートは見つけました: ただ、タイマーが複数あって、どこを見たらいいのか分かりません。404ページもあって上限○秒みたいなのは書いてないんですよね...見つけられてないだけかもしれませんが。 あれこれ試行錯誤する前に質問しようと思い、今、質問しています。 よろしくお願いします。 ※が使えないマイコンでの疑似乱数の生成方法については、次回質問します。今回は一応、動いているので気にしません。
回答: >r = rand() % 30000;//0~29,999の乱数を生成する...はず int rand(void) は、0からRAND_MAXの間の擬似乱数整数を生成します。 H8のでは、RAND_MAX=32767に定義されていますので %30000の結果は 0~2767が2768~29999の2倍頻度あらわれることになり、30~32.8秒の頻度があがりますよ。 一方 >int r = 30000; (←もしかして、RAND_MAXと勘違いしてる?) >srand(r); で、ランダムシードを毎回30000に固定して設定しているので そのシードから生成される乱数系列が、 質問文のような動作になる乱数系列だったのではないでしょうか。