2017-12-31 236 views
2

Cで乱数値を作るにはどうすればよいですか? コインを裏返すような行動が必要です。コイン反転のためのcのランダムint値の作成方法

#include <stdio.h> 
#include <stdlib.h> 
#include <math.h> 
#include <limits.h> 
#include <time.h> 

int main(void) 
{ 
    int i; 

    srand(time(NULL)); 

    for (i=0; i<10; i++) 
     if ((int)(((float) rand()/((float) SHRT_MAX)) * 2) > 0) 
      puts("etz"); 
     else 
      puts("pali"); 
    return EXIT_SUCCESS; 
} 
+1

私の好みにはあまりにも複雑です。あなたはちょうど 'if(rand()%2)'を実行することができます – HolyBlackCat

+0

マークされた重複は本当に重複していません - その質問は硬貨ではなく、公平なコインではありません。 – Clifford

+0

@HolyBlackCat不十分なアイデア - 投稿された回答を参照してください。 –

答えて

4

あなたの解決策の問題は、表現(int)(((float) rand()/((float) SHRT_MAX)) * 2) > 0shortintが同じ幅あるプラットフォームを除いて常に真であるので、常に正の整数を返しますrand()である:ここでは は、私が試したものです。

もう一つの問題は、rand()がゼロからRAND_MAXないSHRT_MAXに値を返すことである - それは現代の図書館でそうであるRAND_MAX == SHRT_MAX

あなたのソリューションは、このように適応させることができる。

(float)rand()/RAND_MAX > 0.5f 

が、鋳造浮動小数点の比較は不必要で複雑であるため、それをテストすることができます:

rand() > RAND_MAX/2 

それもして/あなただけの奇数のためにテストすることが示唆される可能性がある:

rand() % 2 == 0 

が、それはのランダム性に依存しているので、それはいくつかの悪い実装されたアルゴリズムで問題がある単一LSB - それはそうです現代の図書館で作業しますが、コードの移植性を保証するのは避けてください。

関連する問題