0

みんな私がそれを実行するとき、私は私のプログラムでこの本当に奇妙な欠点を抱えています。これは重要なコードです。

変数(編集):

const short int maxX = 100;
const short int maxZ = 100;
const short int lakeChance = 0.9;

addLake関数(編集):

void addLake(Sect sector[][maxZ], int x, int z){    
    sector[x][z].setMaterial(1);
}

主な情報源(編集):

//Generating land mass
for (int x = 0; x < maxX; x++){
    for (int z = 0; z < maxZ; z++){
        //Default material
        sector[x][z].setMaterial(0);

        //Add lake/sea source
        int r = rand();
        float r1 = (r % 1000);
        float r2 = r1 / 1000;

        if (r2 <= lakeChance) addLake(sector, x, z);
    }
}

欠点は、「lakeChance」の値をどのように変更しても、結果はまったく同じように見えることです。addLake関数のように、lakeChanceの値を高く変更したにもかかわらず(つまり、0.5、0.7、0.9)、起動ごとに約3〜6回呼び出されるようです。この関数は、「lakeChance」の値を1に変更した場合にのみ呼び出されます。乱数ジェネレーターは正常に動作するため、結果は毎回多少異なります。

4

2 に答える 2

4

明らかにそれ自体は何も悪いことはわかりません。そこで、次のコードを試しました。

int test(float chance)
{
    int call = 0;

    for(int i = 0; i != 100000; i++)
    {
        int r = rand();

        float r1 = (r % 1000);

        float r2 = r1 / 1000;

        if(r2 <= chance)
            call++;
    }

    cout << "Chance is " << chance << ": " << call << " invocations or "
         << ((100.0 * call) / 100000.0) << "% of the time!" << endl;

    return call;    
}

予想通り、私はこれらの結果を得ました:

Chance is 0.1: 10216 invocations or 10.216% of the time!
Chance is 0.2: 20232 invocations or 20.232% of the time!
Chance is 0.3: 30357 invocations or 30.357% of the time!
Chance is 0.4: 40226 invocations or 40.226% of the time!
Chance is 0.6: 60539 invocations or 60.539% of the time!
Chance is 0.7: 70539 invocations or 70.539% of the time!
Chance is 0.8: 80522 invocations or 80.522% of the time!
Chance is 0.9: 90336 invocations or 90.336% of the time!
Chance is 1: 100000 invocations or 100% of the time!

いくつの湖を追加しようとしていますか?

于 2013-01-05T00:42:52.680 に答える
-1

randomize()を呼び出す前に試してくださいrand()

于 2013-01-05T00:26:48.507 に答える