2016-04-09 34 views
-4

Cで2つの数字をランダムに選択する方法はありますか? rand()のような関数は時間がかかりすぎるようです。彼らは必要ですか?Cでランダムに2つの数字の間で選択する(コインを反転する)

+3

実際には非常に乱数を生成することは困難です。だから、この質問への答えは、どのようにランダムにそれをしたいですか? – user3528438

+2

とどのくらい速いですか? –

+4

'RAND_MAX'が' 32767'(MSVCなど)の場合、 'rand()'を一回呼び出すと15コインのフリップが得られます。 –

答えて

1

これを試してみてください:冗談

// 0=heads; 1=tails; 
int flipCoin(){ 
    return 1; // Chosen by a fair coin toss. 
       // Guaranteed to be random. 
} 


とにかく、ここに戻って、本当の問題は、あなたが望む/必要とする品質は何ですか?あなただけの非常に高速なPRNGを必要とするので、品質は、あまりにも重要でない場合は、このような何かを試してみたいことがあります。

static unsigned int g_seed; 

//Used to seed the generator.   
inline void fast_srand(int seed){ 
    g_seed = seed; 

} 

//fastrand routine returns one integer, similar output value range as C lib. 

inline int fastrand(){ 

    g_seed = (214013*g_seed+2531011); 

    return (g_seed>>16)&0x7FFF; 

} 

int flipCoin(){ 
    return fastRand()%2; 
} 

そして、明らかにあなたは「fastrand」ジェネレータをシードする必要があります。

クレジットFaster than rand()?このコードは、この質問にアシスと答えから来ています。

+1

これは[線形合同擬似乱数生成器]です(https://en.wikipedia。org/wiki/Linear_congruential_generator)であり、乱雑性があまり良くありません。私は[線形フィードバックシフトレジスタ疑似乱数生成器](https://en.wikipedia.org/wiki/Linear_feedback_shift_registers)の[Xorshift](https://en.wikipedia.org/wiki/Xorshift)ファミリーを好む。 –

+0

@ NominalAnimal、このデザインで実装されているRNGスキームを識別してくれてありがとうございます。どのような種類のRNGであるかわかりませんでした:Pあなたがリンクしている他のPRNGメソッドを調べなければなりません。 – SpencerD

関連する問題