アプリ版:「スタンプのみでお礼する」機能のリリースについて

ときに

<?php
echo mt_rand(0,9);
?>

では毎回同じ値が出て駄目だとなっていましたが
最近ではわざわざ

<?php
mt_srand();
echo mt_rand(0,9);
?>

とか

<?php
mt_srand(time());
echo mt_rand(0,9);
?>

とかのように
mt_srand();

mt_srand(time());
などを追加しなくてもよくなったのでしょうか?
これらをしなくても更新の度に値は変っています

A 回答 (2件)

#1です。


うーん、たしかにそう言われてみれば…
しかし srand()/mt_srand()については下記のサイトでこのように紹介されています。
http://always-pg.com/php/std_rd/number/srand.html

「srand 関数を呼び出す前に rand 関数を呼び出した場合、毎回違った乱数が発生します。 mt_rand 関数についても同様です。」

「毎回違った乱数を発生させる場合は、srand 関数または mt_srand 関数を呼び出す必要はありません。」

mt_srand()のドキュメントでも、注意とは別に「PHP 4.2.0以降、seedはオプションとなり」とありますので自動で行われるようになったと解釈してよいのではないでしょうか。

ちなみに mt_srand(0)など、固定の種を与えてやれば、毎回同じ乱数を発生できるようです。

参考URL:http://always-pg.com/php/std_rd/number/srand.html
    • good
    • 0
この回答へのお礼

ありがとうございます

通常は何もしないでMT_RANDをを日出せば異なるパターンの乱数を発生するが、
同じパターンの乱数を発生させた駆ればMT_SRANDを使うということですね

MT_SRANDにも使い道が残ったということですか

お礼日時:2006/03/26 15:23

http://php.s3.to/man/function.mt-rand.html より、

注意: PHP 4.2.0 以降、 srand() または mt_srand() によりランダム数生成器にシードを与える必要はありません。これは、この処理が自動的に行われるためです。

とあるように、PHP4.2以降は乱数の種の生成を自動でやってくれるようになったようです。

この回答への補足

ありがとうございます

注意: PHP 4.2.0 以降、 srand() または mt_srand() によりランダム数生成器にシードを与える必要はありません。これは、この処理が自動的に行われるためです。

の意味は
mt_srand()を使うときにmt_srand(time())というふうにmt_srand()にtime()のようなシードを与える必要が無く
mt_srand()とだけ記せばよいという意味で
mt_rand()を使うときにmt_srand()を使わなくてもよいという意味ではない
ということではないのでしょうか?

補足日時:2006/03/26 04:47
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!