ページ 1 / 1
乱数を発生させたい
Posted: 2009年11月30日(月) 11:57
by tt
0から65536まで乱数で発生させるにはどのようにしたらよいのでしょうか?
もちろんC言語です
よろしくお願いします。
Re:乱数を発生させたい
Posted: 2009年11月30日(月) 12:09
by Dixq (管理人)
環境は何ですか?
リナックスやウィンドウズ、そのコンパイラなど
Re:乱数を発生させたい
Posted: 2009年11月30日(月) 12:09
by しかばね
環境はなんですか[img]../pic/i/63912.gif[/img]
規約を読んで下さい。
Re:乱数を発生させたい
Posted: 2009年11月30日(月) 12:20
by バグ
「乱数発生アルゴリズム」でググれば色々とヒットしますよ
Re:乱数を発生させたい
Posted: 2009年11月30日(月) 12:20
by softya
精度次第で色々方法があります。
http://ja.wikipedia.org/wiki/%E6%93%AC% ... 1%E6%95%B0
>0から65536まで乱数で発生させるにはどのようにしたらよいのでしょうか?
65536(0x10000)は17bit必要なので勝手な解釈で65535(0xffff)までとさせてもらいます。
65535までと言うことで、簡単な方法です。
unsigned short randam()
{
static unsigned short rand = 441;
rand *= 17567;
rand += 5;
return rand;
}
単純なので、4096周期で同じ数値列に戻ります。0~65535を完全網羅できません。
もっと精度がほしかったら、また別の方法をご紹介します。
Re:乱数を発生させたい
Posted: 2009年11月30日(月) 12:45
by tt
環境はwindowsです。
みなさんありがとうございます。
単純な関数はないのですかね?
Re:乱数を発生させたい
Posted: 2009年11月30日(月) 13:10
by softya
私のがお望みじゃないのはわかりました。
では、規約に従ってください。
>使っているOS名・コンパイラ名・ライブラリ名も明記しましょう。
求めてる単純さと言うか使い方の例を書いてください。
こんな風に使いたいと具体的に。
Re:乱数を発生させたい
Posted: 2009年11月30日(月) 15:55
by non
どこまで、理解されて質問されているのかわからないので、
とりあえず、次のプログラムを動かしてみてください。
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i;
printf("RAND_MAX=%d\n",RAND_MAX);
for(i=0;i<100;i++)
printf("%7d ",rand());
return 0;
}
RAND_MAX はいくらが表示されましたか?このRAND_MAXはコンパイラなどの環境によって
変わります。ですから、みなさんが環境をとしつこく言われているわけです。
RAND_MAXが32767の環境が一番多く、0から32767までなら上のように簡単です。
0から65536までほしいと言われるので、一度の乱数発生では作れずに、いろんな方法が
あるわけです。また、発生した乱数がどれだけ均一であることを要求しているかによっても
作り方が変わってきます。ですから、目的は何だって話になります。