2017-01-31 50 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