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。 展开
必须是0到1之间均匀分布的,最小值必须是小于0.0000000001。 展开
6个回答
展开全部
用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;
}
展开全部
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;
}
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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
取0-10000000000之间的随机数,然后除以10000000000即可
强制转换为double型就不会判为0 了
强制转换为double型就不会判为0 了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
就随0之1的10^9次方 之后得出的东西除10^9次方
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼上为何不试试,用除法得出的数可是自动判为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;
}
#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;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询