0

これを機能させることができないようです。アイデアは、各反復後に累積する、各カウント後の表と裏のパーセンテージを計算することです。計算のためにnan%を取得し続けることを除いて。誰かが私が間違っていることを見ますか?

void flipCoin(time_t seconds, int flipCount){
    vector<int> flips;
    float headCount = 0;
    float tailCount = 0;
    double headProbability = double((headCount/(headCount + tailCount))*100);
    double tailProbability = double((tailCount/(headCount + tailCount))*100);

    for (int i=0; i < flipCount; i++) {
        int flip = rand() % (HEADS - TAILS + 1) + TAILS;
        flips.push_back(flip);
        if (flips[i] == 1) {
            tailCount++;
            cout << "Tail Percent: " << tailProbability << "%" << endl;
        }else{
            headCount++;
            cout << "Head Percent: " << headProbability << "%" << endl;
        }
    }
}
4

3 に答える 3

2

あなたはこれをしたいです

void flipCoin(time_t seconds, int flipCount){
    vector<int> flips;
    float headCount = 0;
    float tailCount = 0;
    double headProbability = 0;
    double tailProbability = 0;

    for (int i=0; i < flipCount; i++) {
        int flip = rand() % (HEADS - TAILS + 1) + TAILS;
        flips.push_back(flip);
        if (flips[i] == 1) {
            tailCount++;
            tailProbability = double((tailCount/(headCount + tailCount))*100);
            cout << "Tail Percent: " << tailProbability << "%" << endl;
        }else{
            headCount++;
            headProbability = double((headCount/(headCount + tailCount))*100);
            cout << "Head Percent: " << headProbability << "%" << endl;
        }
    }
}

また、パーセンテージを出力するだけであれば、tailProbability や headProbability は必要ありません。計算結果を直接印刷できます。

編集: headCount + tailCount を i+1 に置き換えることもできます。ただし、後で関数を変更すると、問題が発生する可能性があります。

于 2012-11-28T05:08:18.993 に答える
1

あなたの問題は、一度だけ計算するという事実にありますheadProbability-tailProbabilityそして、それらを計算すると、 に評価され0 / 0ます。

float headCount = 0;
float tailCount = 0;
// Both are 0, end up as 0/0
double headProbability = double((headCount/(headCount + tailCount))*100);  
double tailProbability = double((tailCount/(headCount + tailCount))*100);

//Never recalculated in the loop

これを修正するには、単純に最初に 0 として定義してから、ループで再計算します。vectorすべてのフリップの結果ではなく、カウントを追跡するだけでよいため、ここでも必要ないようです。

double headProbability = 0;
double tailProbability = 0;

for(int i = 0; i < flipCount; ++i) {
    int flip = rand() % (HEAS - TAIL + 1) + TAILS; //This could be simplified
    if(flip == 1) {
        ++tailCount;
        //Recalculate tailProbability
    } else { 
       //Etc...
    }
}
于 2012-11-28T05:02:15.410 に答える
0

nan数ではないことを意味します。0で割ったのでわかりました。

あなたのコードは、コインを投げる前に一度だけ確率を計算します。各反復後に確率を再計算するために、計算をループに入れる必要があります。

void flipCoin(time_t seconds, int flipCount){
    vector<int> flips;
    float headCount = 0;
    float tailCount = 0;
    double headProbability;
    double tailProbability;

    for (int i=0; i < flipCount; i++) {
        int flip = rand() % (HEADS - TAILS + 1) + TAILS;
        flips.push_back(flip);

        headProbability = double((headCount/(headCount + tailCount))*100);
        tailProbability = double((tailCount/(headCount + tailCount))*100);

        if (flips[i] == 1) {
            tailCount++;
            cout << "Tail Percent: " << tailProbability << "%" << endl;
        }else{
            headCount++;
            cout << "Head Percent: " << headProbability << "%" << endl;
        }
    }
}
于 2012-11-28T05:05:21.633 に答える