2012-03-05 17 views
4

の2点間のランダムな数を選ぶ、それはCで2つの限界の間の乱数を生成することができます。私。私は、乱数関数が呼び出されるたびに生成させたいので、basciallyは私が思っていたC

function x 
{ 
    generate random number; 
} 

while(1) 
{ 
    function x; 
    delay 
} 

を、その数は、例えば、間にあることを私は知っている100と800

を持っている:私のプログラムは次のように設定されていますすでに作られた関数はランダムとrandmizeと呼ばれるがstdlib.h であり、私はちょうど上限と下限

を作成する方法を知らない

答えて

6

まず、一度だけあなたのPRNG をシードすることを忘れないでください:

srand(time(NULL)); 

次に、この機能あなたが欲しいものを行う必要があります。あなたのケースでは
(軽くテストし、動作しているようです)

int RandRange(int Min, int Max) 
{ 
    int diff = Max-Min; 
    return (int) (((double)(diff+1)/RAND_MAX) * rand() + Min); 
} 

、あなたがしたいと思う:これは、(法よりも遅くなることがあります浮動小数点演算を使用しています

x = RandRange(100, 800); /* x will be between 100 and 800, inclusive */ 

%)の算術演算を行いますが、偏りが少なくなります。

+0

2つの数値の間に数値を生成する方法はありますかそれは私が10ミリ秒ごとの秒関数を呼び出しながら、(1)(スーパーループ)を持っていることは何sranとランド機能 – user1175889

+0

をusinfのない制限。 – user1175889

+0

乱数が必要な場合は、rand()を使用するか、独自のPRNGを記述する必要があります。 – abelenky

3

まず0と1(の間の乱数を取得いただき、ありがとうございます)。これを希望の範囲(R* (right limit - left limit))にスケーリングします。次に、最小値を追加します。

int rand_between(int l, int r) { 
    return (int)((rand()/(RAND_MAX * 1.0f)) * (r - l) + l); 
} 
+1

は範囲が不均一な弾性のマッピングが含まれている可能性があるため – BlackBear

0

モジュラス演算子を見てください。

int r = rand(); 
r = (r % 700) + 100; 

700です。

+2

率は偏った乱数を生成することがあります...それはちょっと奇妙に見える、あなたのreturn文を確認してください。 – perreal

+0

もしそうなら、発電機は既に偏っていて悪いと思う。その状況を悪化させることが良いか悪いかは、それを悪化させると発見と改善の可能性が増すので議論の余地があるかどうか。 – Joe

+0

@perrealより良い答えがあります。私はこれを明瞭にするために投稿しました。私はポスターがその答えをどのように使用しようとしているのか分かりません。十分に良いことが十分に良いかもしれません。 – bbarnhart

関連する問題