2017-05-23 9 views
0

私はこの回答でコードを見つけましたHow to generate a random number from within a range完全に動作するコードですが、tisは整数です。誰でもこのコードを変更して、 0と1の間?0から1までの無作為な浮動小数点数の生成方法

#include <stdlib.h> // For random(), RAND_MAX 
// Assumes 0 <= max <= RAND_MAX 
// Returns in the closed interval [0, max] 
long random_at_most(long max) { 
unsigned long 
// max <= RAND_MAX < ULONG_MAX, so this is okay. 
num_bins = (unsigned long) max + 1, 
num_rand = (unsigned long) RAND_MAX + 1, 
bin_size = num_rand/num_bins, 
defect = num_rand % num_bins; 

long x; 
do { 
x = random(); 
} 
// This is carefully written not to overflow 
while (num_rand - defect <= (unsigned long)x); 

    // Truncated division is intentional 
    return x/bin_size; 
    } 
+0

0-100(整数)からランダム化し、答えを1で割ってみてください。例:return 1 /(randomizeNum) –

+0

どういう意味ですか?浮動小数点を使用するためにこれを書き直しますか?もしそうなら、その試みを投稿してください。そうでなければ、この質問は意味をなさない。 – Lundin

+1

https://stackoverflow.com/a/13409133/2630032 –

答えて

0

Cの方法:

#include <stdlib.h> 

    int main(int argc, char** argv) 
    { 
     printf("Random value: %f\n", (float(rand())/float(RAND_MAX)); 
     return 0; 
    } 

C++ 11の方法:

#include <random> 

    int main(int argc, char** argv) 
    { 
     std::default_random_engine generator; 
     std::uniform_real_distribution<float> distribution(0.0, 1.0); 

     printf("Random value: %f\n", distribution(generator)); 

     return 0; 
    } 
+0

質問は、CのためではありませんC++。 – Barmar

+0

ああ、申し訳ありませんが、タグを忘れました。答えにはrand()も含まれていますので、Cでも使えます:) – dmsovetov

+0

問題は、私がそれらの多くを欲しいということです。約150000なので、プログラムは数字を一様に返す必要があります –

1

あなたは本当にそこにすべてが複雑なコードは必要ありません。次のコードは十分なはず

srand(time(NULL)); 

double random(){ 

    return (double)rand()/RAND_MAX; 
} 

アイデアをただそこにあるあなたがrandのためにこのような何かインスタンスのと、あなたの主な機能に正しく擬似乱数ジェネレータを初期化する想像0とRAND_MAXの間の乱数を選び、次にそれをRAND_MAXで割ります。 RAND_MAX/RAND_MAXが1になると、0と1の間のランダムな値が返されます。

関連する問題