2017-01-31 77 views
-3

我想創建一個介於0和1之間的隨機數,但是我的代碼輸出爲零。C++中0和1之間的隨機數

#include <iostream> 
#include <cstdlib> 
#include <ctime> 

using namespace std; 

int main() 
{ 
    srand(time(0)); 

    for(int x=0;x<100;x++) 
    { 
     cout<<(rand()%10)/10<<endl; 
    } 
    return 0; 
} 
+1

之間的值是否希望有整數除法呢? –

+1

我建議您使用[現代C++隨機數設施](http://en.cppreference.com/w/cpp/numeric/random/uniform_real_distribution)而不是'rand()'。 –

+1

查看http://stackoverflow.com/questions/686353/c-random-float-number-generation – jhilmer

回答

3

這個:(rand()%10)/10給你一個(低質量)零和RAND_MAX之間的隨機整數,然後你用模數將它變成零和九之間的一個(偏置)整數,然後你執行整數除以10,小於1的值將被截斷爲零。

一個更好的解決辦法是使用來自C++ 11的隨機設施,並使用std::uniform_real_distribution獲得0和1

0

您正在劃分一個整數。低於1的任何東西都會被截斷爲0.您需要聲明/投出雙精度或浮點數(要有小數)。

+2

否 - 即使鑄造浮動或雙重不會給你一個0和1之間的統一分佈隨機數 – jhilmer

+1

@jhilmer我只回答了部分問題(爲什麼輸出爲0)。其實並沒有真正的問題,所以我只是給他一個提示,試圖糾正他的代碼。我應該補充說,這不是解決整個問題的辦法。 – Carele