2013-10-29 106 views
3

我该怎么做?C++创建一个0.1到10之间的随机小数

这是我这样做的尝试:

srand (time(NULL)); 
seed = ((double)rand())/((double)RAND_MAX) * 10 + 0.5; 

还什么是创建0和一些INT X之间的随机整数的方式。 [0,X]

+2

你想怎样分配来实现呢?制服? –

+0

只需创建一个从'0'到'9.9'的随机小数,并添加'0.1'... –

+0

请参阅编辑我的答案为您的整数问题。 – Adam

回答

1
srand (time(NULL)); 
seed = ((double)rand())/((double)RAND_MAX) * 9.9 + 0.1; 

露面到小数点后2位:

printf("%.2lf\n", seed); 

如果x你需要的是小于RAND_MAX,然后用

seed = rand() % (x+1); 

产生一个整数在[0, x]

+0

有没有什么方法可以格式化,以便只显示最多两位小数? – tmacnadidas

+0

要仅显示两位小数,请控制如何将其打印到屏幕。例如'sprintf(“%。2d”,float_number);' – Silex

+0

@ user2293151编辑成答案。 – timrau

9

的C++ 11路:

#include <random> 

std::random_device rd; 
std::default_random_engine generator(rd()); // rd() provides a random seed 
std::uniform_real_distribution<double> distribution(0.1,10); 

double number = distribution(generator); 

如果只想整数,用这个来代替分布:

std::uniform_int_distribution<int> distribution(0, x); 

C++ 11是真正强大和精心设计的在这方面。发电机与分配的选择是分开的,范围被考虑到,线程安全,性能好,人们花了很多时间来确保它们都是正确的。最后一部分比你想象的要难得多。

+1

在一个较长的概述http://stackoverflow.com/questions/7114043/random-number-generation-in-c11-how-to-generate-how-do-they-work – Silex

+0

@Silex很好的链接的更多信息。来自2013年GoingNative的这次演讲也非常有趣和翔实:http://channel9.msdn.com/Events/GoingNative/2013/rand-Considered-Harmful – Adam

+0

应该指出,你不是播种引擎。 – Simple

0
#include <iostream> 
#include <algorithm> 
#include <vector> 
#include <ctime> 
#include <cstdlib> 

using namespace std; 

float r(int fanwei) 
{ 
    srand((unsigned)time(NULL)); 
    int nTmp = rand()%fanwei; 
    return (float) nTmp/10; 
} 

int main(int argc, const char * argv[]) 
{ 
    cout<<r(100)<<endl; 
    return 0; 
}