C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: C++のsrandについてです(超初心者です)


(過去ログ 60 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■34275 / inTopicNo.1)  C++のsrandについてです(超初心者です)
  
□投稿者/ sou (1回)-(2009/03/25(Wed) 05:38:55)

分類:[C/C++] 

はじめまして。こんにちは。
Visual StudioのExpressヴァージョンを使っています。
C++で、srandを使い、0から1まで(0.6688や0.42345など)のランダムな数を発生させたいと思っているのですが、うまくいきません。
どのようにしたらよいでしょうか?
ヒントなど下さるとあり難いです。
引用返信 編集キー/
■34276 / inTopicNo.2)  Re[1]: C++のsrandについてです(超初心者です)
□投稿者/ επιστημη (1845回)-(2009/03/25(Wed) 06:16:19)
επιστημη さんの Web サイト
2009/03/25(Wed) 06:25:26 編集(投稿者)

> C++で、srandを使い、0から1まで(0.6688や0.42345など)のランダムな数を発生させたいと思っているのですが、うまくいきません。

なにが/どう「うまくいきません」なのか説明してください。

# 「rand()を何度呼んでも同じ値しか返ってこない」んだったら
# 大抵srand()の呼びすぎ。最初に一発だけ呼べばいい。

引用返信 編集キー/
■34278 / inTopicNo.3)  Re[2]: C++のsrandについてです(超初心者です)
□投稿者/ 774RR (330回)-(2009/03/25(Wed) 08:37:50)
用途次第なんだけど、区間については慎重に考える必要があるので注意が必要
[0, 1] でよいのか(閉区間、つまり両端値 0.0 も 1.0 も生成されてよい)
[0, 1) でよいのか(半開区間、つまり 0.99999 は生成されてよいが 1.0 は生成されてはならない)
モンテカルロシュミレーションなど工学的応用においては半開区間のほうが使いやすい。
というあたりを理解してもらったうえであえて

srand は乱数を生成しないのだがその辺の理解は大丈夫?
乱数を生成するのは rand だ。

srand を適切な初期値で1回だけ呼ぶ
(rand を呼び出し適切な方法で区間変換する)を必要なだけ繰り返す、でOK

引用返信 編集キー/
■34296 / inTopicNo.4)  Re[3]: C++のsrandについてです(超初心者です)
□投稿者/ sou (2回)-(2009/03/25(Wed) 14:15:06)
お二方の回答でやり方がわかりました。
ありがとうございました。
解決済み
引用返信 編集キー/
■34297 / inTopicNo.5)  Re[4]: C++のsrandについてです(超初心者です)
□投稿者/ 774RR (331回)-(2009/03/25(Wed) 14:55:30)
解決したようなので、1つサンプルを提供しておこう。このサンプルが適切か否かはさておき。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define ITERATION 1000000

inline int func(double x, double y) { return x*x+y*y<1; }
inline double mydrand() { return (double)rand()/((double)RAND_MAX+1); }

int main() {
    int i;
    int inside_arc=0;
    srand(time(0));
    for (i=0; i<ITERATION; ++i) {
        if (func(mydrand(), mydrand())) ++inside_arc;
    }
    printf("iteration=%d, inside_arc=%d, pi=%g\n", ITERATION, inside_arc, (double)inside_arc/ITERATION*4);
    return 0;
}

mydrand() はどう動き何を返すのか(特に返す値の範囲)
srand() に渡している seed は何なのか
そもそもこれは何をするソースなのか
どういう原理で何を求めているのか
あたりまで理解できるようになればいいな

解決済み
引用返信 編集キー/
■34301 / inTopicNo.6)  Re[5]: C++のsrandについてです(超初心者です)
□投稿者/ επιστημη (1846回)-(2009/03/25(Wed) 15:58:14)
επιστημη さんの Web サイト
モンテカルロですね、わかります。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -