■掲示板に戻る■
全部
1-
101-
201-
301-
401-
501-
601-
701-
801-
901-
1001-
最新50
レス数が1000を超えています。残念ながら全部は表示しません。
FreeBSDを語ろう Part.2
142 :
名無しさん@お腹いっぱい。
:02/10/17 11:01
/usr/src/lib/libc/stdlib/rand.c を見ると、
http://www.soi.wide.ad.jp/class/20010000/slides/03/sfc2002.pdf
で書かれている70年代−90年代までの古典的標準擬似乱数の式そのままです。
FreeBSD の rand(3) はこの古典的乱数生成式を今でも使っている。
これを % 演算すると、シミュレーションに使えないどころか、簡単なゲームにも使えない。
man 3 rand には bad random generator と良くないとはっきり書いてある。
4.4BSD lite のソースを見つけられなかったので、これが FreeBSD
だけの問題か 4.4BSD lite に由来する問題かはわかんないです。
ところで rand() は ANSI 関数だが ANSI では生成式まで規定していない。
GNU CLIB の glibc では rand() はそのまま random() を呼んでいる。
random() は ANSI 関数じゃないので、標準化されていない。
例えば BSD は random( void ) で RAND_MAX 未満の整数値を返すが、
Windows 版 Borland C/C++ では random( int )で引数値未満を返す。
お手軽に使う擬似乱数に ANSI 関数でかつ古典的 rand(3) を使うの
であれば、どこかの偉い人が次のように書いている。
1 と 10 の間の乱数を生成したいのであれば、常に
j=1+(int) (10.0*rand()/(RAND_MAX+1.0));
を用いて行いなさい。
掲示板に戻る
全部
前100
次100
最新50
read.cgi ver5.26+ (01/10/21-)