7

編集 #3: gcc でコンパイルすると、すべて正常に動作します。clang (バージョン 3.0) を使用すると、0 しか表示されません。比較的単純に思えるので、なぜclangがこれでうまくいかないのか、私はとても混乱しています。

編集 #2: わかりましたので、皆さんのおかげでコードが機能することを確認しましたが、それはおそらく環境です。私はARM Samsung ChromebookのUbuntuでこれらすべてを行っています(実際にはchrootを介して)。すべてをコンパイルするために、clang 3.0 (-o フラグのみ) を使用しています。私はvimですべてを入力しています。これが起こっているのは、私がARMを使用しているからですか?

私はこれを2時間見つめていましたが、間違いを見つけることができません. Float は、何をしても 0.000000 を返すようです。10000.0 で除算して、10000 を float 型と double 型の変数に格納してみました。

1.1 が格納された float 型の変数と printf("%f", variable) のみを持つ小さなプログラムを作成し、0.000000 を出力しました。

編集: float をテストしていたので、1.1 がそこにあることを忘れていました.. 10000 で割る必要があることはわかっています。

私は何を間違っていますか?

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

bool diceRoll (int a)
{
    int n = 0;
    int b = 0;
    while(n < 1) {
        b = rand() % 12;
        if(b == a || b == 6) n++;
    }
    if(b == 6) return false;
    else return true;
}


int main (void)
{
    srand( (unsigned)time(NULL));
    int a, n, house, player;
    float houseWinRate, playerWinRate;
    house = 0;
    player = 0;
    float total = 1.1;

    for(n = 0; n < 10000; n++) {
        a = rand() % 12;
        if(a == 1 || a == 2 || a == 11) {
            house++;
        }
        else if(a == 6 || a == 10) {
            player++;
        }
        else {
            if(diceRoll(a) == true) player++;
            else house++;
        }
    }
    printf("%i, %f\n", house, total);
    houseWinRate = house / total;
    playerWinRate = player / total;

    printf("The house has %i points. That's a winrate of %f.\n", house, houseWinRate);
    printf("The player has %i points. That's a winrate of %f.\n", player, playerWinRate);
    return 0;
}
4

1 に答える 1

3

[解決済み] OP は、このコードが Chromebook の gcc で動作することを確認しました。

これは答えではありませんが、ここにあるものはコメントに投稿できません。

*100前に試してもらえます/totalか?(あなたのコードパッドコードを参照してください)

また、最も単純なテスト アプリを試して、算術部分のみをテストします (これも double for を使用しhouseWinRateます)。

int main (void)
{
    // using hardcoded value here
    int house = 5492;
    int player = 4508;

    double houseWinRate = 0.0;
    float playerWinRate = 0.0;
    float total = 10000.0;


    houseWinRate = ((double)house / total) * 100.0;
    playerWinRate = (player * 100.0) / total;

    printf("[double] The house has %i points. That's a winrate of %lf percent.\n", house, houseWinRate);
    printf("[mul first] The player has %i points. That's a winrate of %f percent.\n", player, playerWinRate);
}
于 2013-09-23T04:50:38.833 に答える