- ベストアンサー
時間以外にもあるのでしょうか?
本日からプログラム(C)の勉強をしています。 少し疑問に思ったことがあるのでよろしければ教えてください。 起動時に1・2・3の数字を出力するものをつくりました。 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ #include <stdio.h> #include <time.h> #include <stdlib.h> main () { int computer; srand(time(NULL)); computer = rand() % 3 + 1; printf("コンピューターは %d", computer); return 0; } ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ ・実行するたびに異なる数字を出力したかったので今回は「時間」を使いましたが、「時間」以外に使えるものはないのでしょうか? (「日付」「年」などでもいけそうなのですが、短時間に数回実行する場合は同じ結果がでそうです) 短時間に数回実行しても異なる数字を出力できるものをおねがいします。 ・「時間」の場合、日本ではすべての人が同じ時間を共有しているので同じタイミングで実行した場合は同じ結果がでるのでしょうか? 以上二点ですが回答をおねがいします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
そうそう, 「普通の C の範囲で使えることが確実」な乱数の種は時刻くらいしかないはずです. 言い換えれば「OS などの処理系を限定すれば他のものを使えるかもしれない」ということになります. 例えば今どきの Unix 系の OS なら /dev/random くらいあっても不思議ではありませんし, システムによっては物理乱数生成器を持っているかもしれません. でこの質問に関していえば「処理系がわからない以上『時刻』しか言いようがない」ということで.
その他の回答 (4)
- TinyPine
- ベストアンサー率30% (719/2386)
No.1です。 GetTickTimeで取れるのはミリ秒です。 ただ、ダブルワードなので、int変換して下さい。 そして適当な桁数を抜き出せば乱数のシードに使えるのでは無いでしょか。
お礼
msはマイクロ秒 GetTickTimeはミリ秒ですか・・・ なんかすごいです。。桁が^^; 乱数は時間を使うのがやはり一般的みたいです。 ご教授感謝します。
- shimix
- ベストアンサー率54% (865/1590)
>>msの下何桁か使ってみてはいかがですか。 >これはマイクロソフトのプロダクトKEY下何桁かを使うという事でしょうか? おそらくANo.1の方は「micro sec.(マイクロ秒)」の意味で使われたと思われます。Microsoftは通常大文字表記(MS)にしますので。
お礼
なるほどです。 Microsoftは大文字なんですね 覚えておきます。 ご教授ありがとうございます。
- Tacosan
- ベストアンサー率23% (3656/15482)
後半だけ: この場合の「時刻」というのは「その PC における時刻」を意味します. ですから, 「全く同時に実行した」としても, 「同じ時刻になる」とは限りません. 普通の時計でも, ちゃんと時刻を合わせておかないと「同じ時刻」を指さないのと同じ.
お礼
やはりそうですか・・・^^; 最初の設定の時に時間あわせしますし、偽ることは可能ですよね。 ただ、もし 同じ時間を共有できており同じタイミングで起動すると同じ数値がでるんでしょうね。 おくが深いです。。
- TinyPine
- ベストアンサー率30% (719/2386)
msの下何桁か使ってみてはいかがですか。 後、秒 DWORD dWrk = GetTickTime();
お礼
>>msの下何桁か使ってみてはいかがですか。 これはマイクロソフトのプロダクトKEY下何桁かを使うという事でしょうか? ほぇ~そんなこともできるんですね。 これを使ったらそのPCだけの番号が割り当てることができそうです。 >>後、秒 >>DWORD dWrk = GetTickTime(); 命令文を書いていただいているので助かります^^ これはtime(NULL)とは違って59通りしかないんですね。 やはり使い分けが大事なんでしょうね。。
お礼
理解しました^^ 処理系が分からない以上「時刻」しかないんですか。 でも全然「時間」だけでも困ることはないんですよね。 ご教授ありがとうございました。