2010-11-30 8 views
10

私はrand()を使って-50.0と50.0の範囲でランダムな浮動小数点を生成しようとしています。私はどこでも答えを探しましたが、intと%operatorを扱っています。負の範囲から正の範囲へのランダムフロートの生成?

+0

可能重複[C++ランダムフロート](http://stackoverflow.com/questions/686353/c-random-float:その方法は、あなただけの古き良きランド()のようなmy_randを()を使用することができます) –

答えて

11

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

float RandomNumber(float Min, float Max) 
{ 
    return ((float(rand())/float(RAND_MAX)) * (Max - Min)) + Min; 
} 
5

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

  1. rand()はそうあなたが-50〜100の範囲を望んで0と
  2. 1の間の数を取得するためにRAND_MAXで割るあなたに0と
  3. RAND_MAX間の数を示します50、したがって最終的に50.0
を減算することによってゼロに50(0〜3点あたり100)の中心をシフト100.0
  • 掛け
  • 4
    ((float)rand())/RAND_MAX * 100.0 - 50.0 
    
    4

    正直なところ、すべての現在の答えは(私は(そのランドを想定しています彼らのソリューションの分布の変化があることを説明していない)均一な分布に従います!私が間違っていたら私を修正してください)。ライブラリをしてください使用して、私のお勧めは、C++ 0xの中に新しい施設を使用している:

    #include <random> 
    #include <functional> 
    
    int main() 
    { 
        std::mt19937 generator; 
        std::uniform_real_distribution<float> uniform_distribution(-50.0, 50.0); 
        auto my_rand = std::bind(uniform_distribution, generator); 
    } 
    

    あなたができない場合は、ブーストは完璧な選択です。

    std::vector<float> random_numbers(1000); 
    std::generate(random_numbers.begin(), random_numbers.end(), my_rand); 
    
    +0

    質問には、特に 'rand'を使う必要があるとのことです。しかし、はい、私は同意します。配信が本当に重要な場合は、ブーストは良い選択肢のように思えます。 – Maxpm

    +1

    @Max:もっと正確に言えば、質問は「試して... randを使用しています」と言っています。 OPはそれが*要件*であるとは決して言わなかった。 – Cascabel

    +0

    @Jefromi良い点。いつもより睡眠不足になるはずです。 :P – Maxpm

    関連する問題