- 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
書いて下さったんですね。 コードみて勉強さしてもらいます。 ほんとうにありがとうございました!!
|