簡體   English   中英

按概率執行 if else 語句

[英]executing if else statement by probability

我有一個看起來像這樣的程序。 我想按概率運行我的 if else 查詢。

int main() {
    int probability = 70;   //<-- 70% probability to run if statement

    for (int i = 0; i < 5e5; i++){
        if (???){      
            ...
        }
        else {         
            ...
        }
    }
    return 0;
}

正如@user3386109 指出的那樣, if(rand() % 100 < chance)可能就足夠了。 C FAQ 中所述,當生成的隨機數不是 100 的倍數時,此方法會導致某些數字出現得比其他數字多。 如果落在有區別的范圍內,最簡單的就是再畫一個數字。

#include <stdio.h>
#include <stdlib.h> /* rand() */
#include <time.h> /* clock() */

/** http://c-faq.com/lib/randrange.html */
static int rand_0_99(void) {
    unsigned int x = (RAND_MAX + 1u) / 100;
    unsigned int y = x * 100;
    unsigned int r;
    do r = rand();
    while(r >= y);
    return r / x;
}

int main(void) {
    size_t i, cumulate = 0;
    const size_t replicas = 1000000;
    const int chance_100 = 70;

    /* Seed the linear congruential generator with the time. */
    srand((unsigned)clock());
    for(i = 0; i < replicas; i++) {
        const int decision = rand_0_99() < chance_100;
        if(decision) cumulate++;
    }
    printf("P(r < %d/100) = %lu/%lu\n",
        chance_100, (unsigned long)cumulate, (unsigned long)replicas);
    return EXIT_SUCCESS;
}

這是矯枉過正,但可能是需要的,尤其是當 100 接近RAND_MAX時。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM