擬似乱数を作ってみよう!
ってことで、すっごく簡単に作ってみよう。
アクセスする時間に応じて、数値を返せば実質乱数じゃね?ってことでプログラム。
<?php echo randsan(); function randsan() { echo (microtime() * 100) % 101; }
はいかんせー!
でも問題が・・・
でもこれ、0.001秒より早いスピードでアクセスされると、同じ数値が出てしまう・・・
<?php for($i = 0; $i < 20; $i++) { echo randsan(); } function randsan() { echo (microtime() * 100) % 101; }
これとかね。
なら、アクセス回数の要素も付け加えよう!
擬似乱数改
<?php for($i = 0; $i < 20; $i++) { echo (randsan() . PHP_EOL); } //時間と回数の2変数で作る function randsan($count = 0) { if(isset($GLOBALS["randsan"])) { // 素数を足しただけで1でもいいです $GLOBALS["randsan"] += 13; $GLOBALS["randsan"] %= 100; } else { $GLOBALS["randsan"] = 0; } echo ((microtime() * 100) + $GLOBALS["randsan"]) % 101; }
これでアクセスする度に違うしバッチリだね!
でもこれにも問題が・・・
これ、同じプログラムを、同時に別のPCで実行したら同じ乱数の値が出るよね・・・
じゃあIPで制限する・・・?あれ・・・?これ無限に無理じゃね・・・?
だから擬似乱数
ってことで、ソフトウェアで完璧な乱数とか無理じゃねっていうお話。
だから擬似乱数って呼ばれるんですね。
ちなみに、先輩からハードウェア乱数生成器なるワードをいただきました。
気になる方は調べてみてくださいね。
日記
また1つ課題を消化。
いろんな学びあるの良いこと。
そして昨日の課題、なんでクラス化するの問題が。。。
オブジェクトにするなら、ハノイの塔の配列、移動、表示までのクラスにすればよかった。
ハノイの塔を解くのはまた別のお話ですね。
なんにしても、なぜクラス化するの?どんなオブジェクトを作るの?
っていうのは、いっぱい作っていかなきゃ、慣れない気がします。
1の課題でいろんな気付きをいただけるから、本当に先輩方には感謝なのです・・・!