- ベストアンサー
rand()関数を使用したプログラムで最初の部分が一定の値になる問題
- rand()関数を使用したプログラムで最初の部分が1になる問題が発生しています。
- rand()関数は乱数を生成するため、毎回異なる値が返されるはずですが、最初の部分が常に1となっています。
- デバッガを使用して調査した結果、最初の数回のrand()の返り値が似たような数字となっていることがわかりました。
- みんなの回答 (3)
- 専門家の回答
関連するQ&A
- 型変換??
int RANDOM_FUNCTION( int n ) { return (int)( rand() / (float)RAND_MAX * n ); } について Q1.この関数は0からn-1までの乱数を作るそうなのですが,何故ですか? 0<=rand()<=RAND_MAX だから0からnまでの乱数ができるような気がするのですが. Q2.RAND_MAXではなく(float)RAND_MAXとキャストしてある意味は何ですか? Q3.srand((unsigned)time(NULL));と srand((unsigned int)time(NULL));では何か違いますか? Q4. static int first = 0; if (first == 0){ srand((unsigned)time(NULL)); first = 1; } という処理でsrand((unsigned)time(NULL));は最初の一回だけ呼び出されるようになっているようですが,この部分を srand((unsigned)time(NULL)); というように毎回呼び出すようにするとどうなりますか? 一回呼び出すだけで乱数系列の初期値が呼び出される時に変化しているのですか? Q5.この関数とは関係ない質問ですが,例えば a:int型 b:int型 c:double型 d:float型 のとき d = a / b + c という演算は 1 a:int型,b:int型より(a / b)の結果はint型(小数になった場合は小数点以下切り捨て) 2 (a / b):int型,c:double型,int<doubleより (a / b + c)の結果はdouble型 3 d:float型,『=のあるときは左辺の型に合わせる』よりdはfloat型 というように型変換されているという解釈でいいのでしょうか??
- ベストアンサー
- C・C++・C#
- 乱数で交互に偶数、奇数が、、、。
C言語で、確率2分の1で0と1を 出そうとして、rand,srand,timeを使って やってみたのですが、ちょうど、0と1が 交互に出てしまいます。何度やっても 変わりません。ただ、1と0が逆になる だけ。こんな感じで0101010101か1010101010 つまり、乱数で奇数と偶数が 交互に発生しているみたいうまくいきません。 なにか、別の方法ありますか? --------------------------------------- srand((unsigned int)time(NULL)); s=rand()%2 これで、やってます。
- ベストアンサー
- C・C++・C#
- 乱数について
Visual Studio2008を使っています。 #include<stdio.h> #include<stdlib.h> #include<time.h> int main(void){ int i; srand(time(NULL)); i=rand(); printf("%d\n",i); return 0; } 乱数を作るために上のようなプログラミングを作りました。 これを「ソリューションのビルド」すると 【warning C4244: '引数' : 'time_t' から 'unsigned int' への変換です。データが失われる可能性があります。】 と出ます。 このまま行っても乱数が出来るのですが どうしたらいいのでしょうか? 8行目を srand(time_t(NULL)); srand((unsigned)time(NULL)); と変えればいいのでしょうか? time_tでやると乱数が同じ値しか出てきません。 教えてください。
- ベストアンサー
- C・C++・C#
- c言語で乱数を扱うときの
乱数を初期化するために srand((unsigned)time(NULL)というのを使いますが これはどういう意味を表してるんでしょうか? timeは1970年から経過した時間を表していることは分かりますし unsignedは符号ビットをなくして表せる数を倍にしてることも分かりますが、 NULLって何のために書いてあるのでしょうか?
- ベストアンサー
- C・C++・C#
- 数字の挿入方法に関しまして
以下のように、 C++で、 変数の値を、 既存の数字列に挿入したいときって、 どんな関数を使うのでしょうか? ======================= srand((unsigned)time(0)); int n = rand()% 109999; ======================= 「ABCDEFG」 という数字列の先頭に、 上記rand()で作った整数の値を挿入したいと思っています。 そして、 「挿入した整数」+「ABCDEFG 」 としたい感じです。 調べ方が悪いのか適切なものを探せませんでした。 簡単な内容でしたらすいません。 宜しくお願い致します。
- ベストアンサー
- C・C++・C#
- 乱数の取得
キー操作をした時に複数の乱数を習得させようと思っています。 【キ─操作関数】 int num[3] = {11, 22, 33}; ←初期化のため数字は適当です。 srand((unsigned int)time(NULL)) for(int i=0; i<=3; i++) { num[i] = rand % 10; } 上記のプログラムを書いています。 num[0]、num[1]、num[2]にそれぞれ0~9の乱数が入ると思うのですが、 num[0]にしか乱数が入りません。 num[1]、num[2]には同じ数字(恐らくtimeで取得した数字?)が入っています。 何かお気づきの点がありましたらアドバイスお願い致します。
- 締切済み
- C・C++・C#
- 乱数について・・・
(1)1,2,3,4の整数のどれかを乱数で発生させる方法 (2)0~1までの実数を発生させる方法 を教えていただけないでしょうか?(a.outするたびに値が変わってほしいです。) ※一応、下のプログラムにあるように実行するたびに違う乱数がanswerに入るようにはできたのですが、いまいち理解できていません。軽い説明や参考URLなども教えてもらえたら助かります。 よろしくお願いします。 #include<time.h> int main() { unsigned short time_a,time_b; unsigned long answer; time_a = time(NULL); time_b = time_a; srand(time_b); answer = rand(); printf("答えは = %d\n",answer); }
- ベストアンサー
- C・C++・C#
- 乱数発生
#include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) {int y, m, l; srand( (unsigned)time( NULL ) ); y=rand() % 2500 + 1600; m=rand() % 12 + 1; l=rand() % 29 + 1; printf("西暦%d年%d月%d日",y,m,l); return(0); }今回は乱数発生でランダムにだされた西暦年月日をつくりましたが、y=rand() % 2500 + 1600; というのがありこれはyという乱数が2500以下1600以上という意味なのですがなぜかプログラムを実行しても3000いくつとか4000いくつなんてのもでてきます。m=rand() % 12 + 1;はちゃんと12以下1以上でできるのですがなぜですか?本当にわかりません。是非だれか教えてください。
- ベストアンサー
- C・C++・C#
- インターネットをやっていると・・・
最近インターネットをやってたらこんなエラーメッセージが出ました。 --------------------------- エラー --------------------------- ランタイム エラーが発生しました。 デバッグしますか? 行: 19 エラー: 'document.getElementById(...)' は Null またはオブジェクトではありません。 --------------------------- はい(Y) いいえ(N) --------------------------- 「はい」を押してみると・・・ --------------------------- Just-In-Time デバッグ --------------------------- 例外 'ランタイム エラー' が スクリプト で発生しました。 この例外をデバッグできるデバッガは登録されていません。JIT デバッグを実行できません。 --------------------------- OK --------------------------- いいえを押すとエラーメッセージが消えます。 でも、しばらくするとまた現れるようです。 なんか問題でもあるんでしょうか? 解決法お願いします。
- ベストアンサー
- その他(インターネット接続・通信)
お礼
回答ありがとうございます。 やっぱりそういう現象が一般に起こるんですね。 >>これを防ぐために、最初に rand を何回か呼び出しておく、 >>というのは、わりと一般的な対策です。 そうなんですね。勉強になりました。 1回でなく数回呼び出してから使うようにしたいと思います。 ありがとうございました。