トップページ > プログラム > 2015年03月06日 > uijm53WG

書き込み順位&時間帯一覧

4 位/186 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000000000000002204



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
C/C++の宿題片付けます 168代目

書き込みレス一覧

C/C++の宿題片付けます 168代目
506 :デフォルトの名無しさん[]:2015/03/06(金) 21:10:02.01 ID:uijm53WG
宿題じゃないんですけど勉強中の初心者です。
大きい乱数が欲しくて0〜4294967295の乱数を返す関数を作ったんですけど0とか4294967295がでません。
ちなみにRAND_MAXは32768で1/2の確率で1を足して、左にシフトを繰り返しています。
必要なファイルもインクルードしてますしsrandも使ってます。
これでできると思うのですが、どこか間違ってますか。

unsigned int rand32bit(void){

unsigned int i,x,r;

x=rand();
if(x<16384) { r+=0; }
else { r+=1; }

for(i=0;i<31;i++){
x=rand();
if(x<16384) { r<<=1; r+=0; }
else { r<<=1; r+=1; }
}

return r;
}

ネット上で色々な乱数生成方法を見つけたのでコピペすればすみます。
でも、なぜでないのか気になってしかたありません。
c言語の乱数には偏りがあるそうでその影響でしょうか?

教えてくださいよろしくお願いします。
C/C++の宿題片付けます 168代目
511 :デフォルトの名無しさん[]:2015/03/06(金) 21:57:04.64 ID:uijm53WG
>>506
そうゆう仕組みだったんですね。それを考慮して作り変えてみます。
>>509
初期化しなくてもビットは全部入れ替わるような気がするのですが、私の勘違いでしょうか?
>>510
whileで数千億回やってもでなかったので。おかしいと思いました。

こんなに早く答えて頂けるとは思っていませんでした。
みなさんありがとうございます。
C/C++の宿題片付けます 168代目
512 :デフォルトの名無しさん[]:2015/03/06(金) 22:04:43.28 ID:uijm53WG
>>508
506じゃなかった508さんでした。
失礼しました。
C/C++の宿題片付けます 168代目
514 :デフォルトの名無しさん[]:2015/03/06(金) 22:16:28.89 ID:uijm53WG
>>513
書いて下さったんですね。
コードみて勉強さしてもらいます。
ほんとうにありがとうございました!!


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。