0-1の範囲で乱数を10,000個発生させ、0.1刻みのヒストグラムを作成
0-1の範囲で乱数を10,000個発生させ、0.1刻みのヒストグラムを作成したいのですが、度数が明らかにおかしいです。アドバイスをください。
発生している問題
0 (0番目の度数) 993 (1番目の度数) 1007 (2番目の度数) 998 (3番目の度数) 958 (4番目の度数) 1001 (5番目の度数) 1049 (6番目の度数) 989 (7番目の度数) 963 (8番目の度数) 2042 (9番目の度数) 「n番目の度数」とは、n-1/10<=x<n/10で発生した乱数の個数です。
該当のソースコード
c
1#include<stdio.h> 2#include<stdlib.h> 3 4int main(void) 5{ 6 int ii, rnd, k, j; 7 float x; 8 9 int dosu[10]={0}; 10 float ransu[10000]={0}; 11 12 for(ii=0; ii<10000; ii++){ 13 k=ii+1; 14 rnd=rand(); 15 x=(float)rnd/RAND_MAX; 16 ransu[ii]=x; 17 /*ii番目に発生させた乱数は、変数ransuのii番目の要素として格納した*/ 18 19 if(0<=ransu[ii]<0.1) dosu[0]++; 20 else if(0.1<=ransu[ii]<0.2) dosu[1]++; 21 else if(0.2<=ransu[ii]<0.3) dosu[2]++; 22 else if(0.3<=ransu[ii]<0.4) dosu[3]++; 23 else if(0.4<=ransu[ii]<0.5) dosu[4]++; 24 else if(0.5<=ransu[ii]<0.6) dosu[5]++; 25 else if(0.6<=ransu[ii]<0.7) dosu[6]++; 26 else if(0.7<=ransu[ii]<0.8) dosu[7]++; 27 else if(0.8<=ransu[ii]<0.9) dosu[8]++; 28 else if(0.9<=ransu[ii]<=1.0) dosu[9]++; 29 30 printf("%f (%d番目の乱数)\n", ransu[ii], k); 31 32 } 33 for(j=0; j<10; j++){ 34 printf("%d (%d番目の度数)\n",dosu[j] ,j); 35 } 36 37 return 0; 38} 39
試したこと
度数の合計が10000になるので、ちゃんと10,000個の乱数が発生しているようです。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。