2014-10-18 56 views
-1

我想生成0和1之间的随机数(包括0和1),但小数点后只有3个分数,如下所示:如何生成[0,1]和3分数之间的随机数

0.000, 0.214, 0.523, 0.451, 0.102, 1.000 

小数点后三位的目的不适用于打印。我想实施蒙特卡罗技术来获得PI的价值。所以这是为if声明。因此,我希望将随机值分配给一个变量是这样的:

double x = 0.241; 
+0

他们是否有均匀分散式?简单地说,你可以使用rand()来产生100和999之间的随机数,并除以1000.取决于这个(差)的随机性对你来说是否足够。 – 2014-10-18 22:18:21

+0

被警告'double'不能*只存储* 3个小数的所有分数。为什么不使用整数并避免你似乎试图解决的问题? (因为它提示[XY问题](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。) – usr2564301 2014-10-18 22:34:43

+0

您可以将限制设置为0 ... 1000 ,然后将结果除以1000得到0.000到1.000的范围 – user3629249 2014-10-18 23:16:40

回答

1

可以生成0和1000之间的随机整数,并将其划分为1000

以下C代码生成期望的随机值

#include <time.h> 
#include <stdlib.h> 

srand(time(NULL)); 
double r = (double)(rand()%1001)/1000; 
+0

总而言之,我想为循环做上百万次并计算产生了多少1.0的值。所以我想要三个分数来增加出现1.0的机会。 – Nano 2014-10-18 22:58:04

+0

请注意,由于RAND_MAX不能被1001整除,因此会导致模偏差。它不会很大,但它会在那里。 – pjs 2014-10-18 23:01:29

-1

使用随机函数来calculare 0和1000之间的随机数,然后将其划分为1000 注意的是,当你使用时间功能来生成随机数,你会得到相同的数,直到PC时钟有同样的v ALUE 例如:

11:20:20 PM > generate random number: 10 
11:20:20 PM > generate random number: 10 
11:20:20 PM > generate random number: 10 
11:20:21 PM > generate random number: 989 

所以,每秒产生一个数字或者找一些黑客(你可以用谷歌轻松找到它,一个地段上计算器的答案已经给出)

相关问题