私は多少悪いことをするつもりです。私は条件を変更するループを再定義したい。これを行う方法はありますか? GCCのドキュメントからプリプロセッサでループを再定義する
、キーワードを再定義することはサポートされています:http://gcc.gnu.org/onlinedocs/cpp/Macros.html
を私は何をしようとしているが、私はそれで面白いものを作ることができるかどうかを確認するために、C++のための「確率論」のラッパーを作るです。 Aおそらくより合法的な使用は
for(int i=0; i < 10; ++i, ++global_counter)
にマッピング
for(int i=0; i < 10; ++i)
により、たとえば、実行中のプログラムにループの繰り返し回数をカウントするだろう
#include <iostream>
#include <cstdlib>
#define P 0.85
#define RANDOM_FLOAT ((float)rand()/(float)RAND_MAX)
#define RANDOM_CHANCE (RANDOM_FLOAT < P)
#define if(a) if((a) && RANDOM_CHANCE)
#define while(a) while((a) && RANDOM_CHANCE)
// No more for loops or do-while loops
#define do
#define goto
// Doesn't work :(
//#define for(a) for(a) if(!RANDOM_CHANCE) { break; }
int main() {
srand(time(NULL));
//Should output a random list of Y's and N's
for(int i=0; i < 100; ++i) {
if(i < 100) {
std::cout << "Y";
} else {
std::cout << "N";
}
}
std::cout << std::endl;
// Will loop for a while then terminate
int j = 0;
while(j < 100) {
++j;
std::cout << j << "\n";
}
std::cout << std::endl;
return 0;
}
達成することが可能です私は何をしようとしていますか?
編集:ありがとうございます - 本当にありがとうございます!
バイアスコインの場合、Pr(HT)== Pr(TH)であれば、公平なコイン(実際にはPを0.5にする)をシミュレーションすることができます。私はこのトリックを発見しませんでしたが、それは便利です。つまり、あなたはPの確率分布を近似することができます。
bool coin() {
bool c1 = false;
bool c2 = false;
if(true) {
c1 = true;
}
if(true) {
c2 = true;
}
//If they have different faces.
bool valid = (c1 && !c2) || (!c1 && c2);
bool result = c1;
if(valid) { return result; }
return coin();
}
これはすばらしいです...非常に多くの異なるレベルのように... – Mysticial
メンタルですが、はい、素晴らしいです。 – BoBTFish
誰かがあなたのコードを維持する必要がある場合は、どこに住んでいるのか分からないようにしてください。 –