C言語関係掲示板

過去ログ

No798 35.6%の確率で1,それ以外なら0を返す

[戻る] [ホームページ]
No.9999

ある%数である引数を返す、といった関数の作り方。
投稿者---keku(2003/10/25 12:13:13)


例えば引数に35.6と入れると、35.6%の確率で1,それ以外なら0を返す
といったような関数はどうすればいいのでしょうか?
10%とかなら、rand()を10で割ったあまりなどで、できそうですが
有効数字が大きくなるとこの方法ではきつそうです。
何かいい方法はないでしょうか?

No.10000

Re:ある%数である引数を返す、といった関数の作り方。
投稿者---たか(2003/10/25 14:11:09)


ここ
からalgo.lzhをGETし、解凍して、whrnd.cかkrnd.cを使って下さい。
これらは実数の0<=n<1の乱数を発生します。

No.10002

Re:ある%数である引数を返す、といった関数の作り方。
投稿者---ともじ(2003/10/25 14:19:37)


こんにちは。

>例えば引数に35.6と入れると、35.6%の確率で1,それ以外なら0を返す
>といったような関数はどうすればいいのでしょうか?

0.00〜100.0 までの擬似乱数を求め、必要な%以下なら 1 を返しては
どうでしょう。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
    int i, cnt = 0;
    double percent, r;
    srand((unsigned) time(NULL));
    
    printf("何%? ");
    scanf("%lf", &percent);

    for (i=0; i<10000; i++) {
        /* r = 0.00〜100.00 の擬似乱数 */
        r = ((double)rand() / (double)RAND_MAX * 10000) / 100.0;
        if (r <= percent)
            cnt++;
    }
    printf("%f\n", cnt / 100.0);

    return 0;
}


No.10005

Re:ある%数である引数を返す、といった関数の作り方。
投稿者---ともじ(2003/10/25 14:54:51)


        /* r = 0.00〜100.00 の擬似乱数 */
        r = ((double)rand() / (double)RAND_MAX * 10000) / 100.0;
        if (r <= percent)
            cnt++;
	/* r = 0.00〜99.99 の擬似乱数 */
	r = ((double)rand() / ((double)RAND_MAX + 1) * 10000) / 100.0;
	if (r < percent)
	    cnt++;
に修正します。

でも、これでは得られる擬似乱数が正確ではないので、No.10000のたかさん
がお教えくださったリンク先を使った方がいいですね。
何故、正確ではないかについては、過去ログのこちらの一番下の
投稿をご参照ください。
http://f1.aaa.livedoor.jp/~pointc/log429.html

#No.10000ですか。キリ番というやつですね。


No.10008

Re:ある%数である引数を返す、といった関数の作り方。
投稿者---たか(2003/10/25 15:32:01)


>#No.10000ですか。キリ番というやつですね。

つまり通算10000個ものレスが書き込まれたという事ですね。おめでとう
ございます。私は前は主に「チャット式C言語入門」で書き込みをして
いましたが(今でも行きますが)、こちらのBBSの方が投稿量が多くて
高度な内容の物が多いみたいなので、参考の為に覗かせていただいて
います。時々間違えてしまい皆様にご迷惑をお掛けしておりますが、こ
れに懲りずこれからもよろしくお願い致します。

No.10003

Re:ある%数である引数を返す、といった関数の作り方。
投稿者---すがりん(2003/10/25 14:22:28)


>例えば引数に35.6と入れると、35.6%の確率で1,それ以外なら0を返す
>といったような関数はどうすればいいのでしょうか?

0以上100未満の実数をランダムに生成します。

(rand() / (RAND_MAX + 1.0)) * 100.0

この式の値は35.6%の確率で、35.6未満になります。
だからそのあたりで条件判定するなり、
35.6を足してintにキャストするなりすればよいと思います。

No.10007

Re:ある%数である引数を返す、といった関数の作り方。
投稿者---keku(2003/10/25 15:13:48)


みなさん回答ありがとうごさいました!
とても参考になりました。