c++如何产生(0,1)之间(开区间)的随机数?

要求随机数在(0-1)之间是平均分布的,或者说是均匀分布的。区间为开区间,也就是随机数不包含0和1,但要求最小随机数能小于1/10^9,也就是小于0.0000000001... 要求随机数在(0-1)之间是平均分布的,或者说是均匀分布的。区间为开区间,也就是随机数不包含0和1,但要求最小随机数能小于1/10^9,也就是小于0.0000000001。如何实现呢?
必须是0到1之间均匀分布的,最小值必须是小于0.0000000001。
展开
 我来答
White_MouseYBZ
推荐于2016-10-10 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6509万
展开全部

用rand函数产生一列1~32768的数,除以32769.0来实现。举例代码如下:

//#include "stdafx.h"//If the vc++6.0, with this line.
#include "stdio.h"
#include "stdlib.h"
#include "time.h"
int main(void){
    int k,i;
    double x=RAND_MAX+2.0;
    srand((unsigned)time(NULL));
    for(k=i=0;i<50;i++)
        printf(++k%9 ? "%10f" : "%10f\n",(rand()+1)/x);
    if(k%9) printf("\n");
    return 0;
}
听不清啊
高粉答主

2015-09-12 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:1.9亿
展开全部
C++中rand()函数是产生随机数的一个随机函数,范围为0~RAND_MAX,其中
RAND_MAX是C中stdlib.h中宏定义的一个字符常量:
所以,要得到一个(0,1)之间(开区间)的随机数,可以这样:
#include <stdlib.h>
#include <iostream.h>
#include <time.h>
void main( void )
{
int i;
srand( (unsigned)time( NULL ) );
for( i = 0; i < 10;i++ )
cout<<((double)rand())/(RAND_MAX+1)<<endl;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
乐正涵柳3
2010-11-12 · TA获得超过952个赞
知道小有建树答主
回答量:650
采纳率:100%
帮助的人:691万
展开全部
取0-10000000000之间的随机数,然后除以10000000000即可

强制转换为double型就不会判为0 了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
泽海鱼传1360
2010-11-12
知道答主
回答量:5
采纳率:0%
帮助的人:0
展开全部
就随0之1的10^9次方 之后得出的东西除10^9次方
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lovemezhoupeng
推荐于2016-08-30 · TA获得超过1187个赞
知道小有建树答主
回答量:269
采纳率:0%
帮助的人:0
展开全部
楼上为何不试试,用除法得出的数可是自动判为0

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

int main()
{
srand(time(NULL)); //时间种子
double a=0.00000000001; //先做double a种子
a=a*(rand()%10000000000);
cout<<a<<endl;
return 0;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式