snrg.net
当前位置:首页 >> C++如何产生(0,1)之间(开区间)的随机数? >>

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

取0-10000000000之间的随机数,然后除以10000000000即可 强制转换为double型就不会判为0 了

#include #include #define T 1000000000LL int main(int argc, char **argv) { int rdm; srand((unsigned int)time(NULL)); rdm = rand() % T; printf("%d\n", rdm); return 0; }

C++中用来产生随机数的函数为rand(), 其返回值为整数.而0到1之间的随机数,明显是浮点数.这样无法直接产生.于是,必须经过转换.转换思路为,生成一个0-N的随机数,然后对其除以N+1,则可以得到0-1直接的浮点型随机数.N的

#include <iostream>#include <time.h> using namespace std; double GetRand(); int main() { cout << GetRand() << endl; return 0; } double GetRand() { srand(time(NULL)); int iRand = rand(); iRand %= 10000; // 取0 ~ 9999 return iRand / 10000.0; // 注意加".0" // PS:保留几位小数就合适求舍,求商 }

要取得[a,b)之间的随机整数,使用(rand() % (b-a))+ a (结果值将含a不含b).用rand() / double(RAND_MAX)可以取得0~1之间的浮点数(注意,不同于整型时候的公式,是除以,不是求模)((rand() % (b-a))+ a )/double(RAND_MAX)应该就可以了

要看你精确到几位我写了一个精确到0.01的供你参考#include#include#includeint main(){ float num; srand(time(NULL)); num = (rand()%100)*0.01;/*这里可以控制精度,应该能看懂吧,这里是两位精度,如果你想精确到0.001,可以写成num = (rand()%1000)*0.001;*/ cout 评论0 0 0

可以通过对随机数的结果对2求余来得到0和1.1)c++中的rand()函数可以得到一个0-rndmax之间的随机数,randmax是一个宏,你可以把它理解成65535;2)使用rand()函数必须添加头文件,代码如下:#include 3) 得到0或1的随机数代码如下:int num=rand()%2;因为对2求余的结果不是0就是1,因此上面这句代码就得到了一个0或1的随机数.

在用rand之前,先用当前时间设置种子,即srand(time(null));然后要得到0到1之前的,可以double i = rand()*1.0/rand_max;同样,你要得到4.1应该是rand()/10.0,否则两个整数相除,得到的是整除的结果,不是double型.

用rand()函数#include <iostream>#include <cstdlib>#include <ctime>using namespace std;int r(int fanwei){ srand((unsigned)time(NULL)); //用于保证是随机数 return rand()%fanwei; //用rand产生随机数并设定范围}int main(){ cout<<r(100)<<endl; //生成100以内的随机数,并显示 return 0;}

方法一:1、功能:产生0到1之间均匀分布的一个随机数2、方法说明:设m=216,产生产生0到1之间均匀分布的一个随机数的计算公式如下:ri=mod(2053ri-1+13849,m),i=1,2,3…… pi=ri/m 例:连续产生10个0到1之间均匀分布的一个随机数 .

knrt.net | lyhk.net | mqpf.net | sgdd.net | 4585.net | 网站首页 | 网站地图
All rights reserved Powered by www.snrg.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com