Ⅰ 怎么用c编写生成(0,1)均匀分布的随机数
float b=rand()/(RAND_MAX+1.0);
printf("%f\n",b);
注释:
stdlib.h头文件中有宏#define RAND_MAX 0x7fff
rand()产生一个0到0x7ffff即0到32767之间的随机数
rand()/(RAND_MAX+1.0)就等于一个0到1之间的小数了,因为rand()最大是32767最小是0,再除以32768就是一个0到1之间的小数(不能等于1),再乘以10就是一个0到10之间的数了(不等于10).最后再加1,就成了一个求1到10之间随机数的式子了.
Ⅱ 用c语言编写产生均匀分布,再利用均匀分布产生正太分布
这么难!!!
#include<stdio.h>
#include<math.h>
#include <stdlib.h>
#include <time.h>
#define PI 3.1415926
#define A 1/sqrt(2*PI)
main()
{
int i,n;
int num[200]={0};
float qiwang,fangcha;
double shu[100]={0.0};
double biaozhuncha,temp,x;
clrscr();
printf("input your qiwang:\n");
scanf("%f",&qiwang);
printf("input your fangcha:\n");
scanf("%f",&fangcha);
printf("input you number of yangbendian(<=200)\n");
scanf("%d",&n);
biaozhuncha=sqrt(fangcha);
for(i=0;i<=n;i++)
{
srand((unsigned)time(NULL));
x = rand() / 10000.0;
x=x*pow(-1,rand());
temp=-pow((x-qiwang),2)/(2*fangcha);
shu[i]=A/biaozhuncha*exp(temp);
}
for(i=0;i<=n;i++)
{
printf(" %-3d",num[i]);
printf(" %5.5f",shu[i]);
if(i%5==4) printf("\n");
}
}
Ⅲ c语言产生均匀分布随机数为什么是同一个值啊
c语言产生随机数 rand() 函数是要设置随机数种子的,即 srand() 函数。
若不调用,则是默认的随机数,也就是说这个随机数序列是固定的。
而随机数序列是根据srand() 所带参数的值变化而变化的,一般如是设置 srand( time(NULL) ); 这样以时间来设置种子,可以保证程序在每次运行时,设置的种子参数都是变化的。
Ⅳ 怎么用c语言实现给出一个整数n输出n个0-1之间的服从均匀分布的数。。。。求大神们帮忙啦
楼上的基本思路是对的,但是程序写的有问题啊~~~~
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(){
int n;
int i;
printf("输入n\n");
scanf("%d", &n);
srand((int)time(NULL));//用当前时间做随机数种子, 可使得每次运行程序产生的随机数都不相同
for(i=0; i<n; i++) //这里按照提问者的要求应该写n,意思是输出n个数
printf("%-4d", rand()%2); //这里按照提问者的要求应该写%2,表示随机出的数是0或者1
return 0;
}
Ⅳ c语言:产生随机数,要求(1)满足均匀分布的[m,n]区间随机数,其中m,n是正整数(2)满足指数
1 均匀分布
intnormal_rand(intm,intn)
{
returnrand()%(n-m+1)+m;
}
2 指数分布:
doubleexp_rand(intm,intn)
{
intx;
doubleU,G;
x=rand();
U=x/(double)(n-m+1);
G=-log(1-U)/t+m;
returnG;
}
Ⅵ c语言产生随机数的问题
直接使用C语言的库函数srand和rand就可以了,最简单随机数发生器就是平均分布的。
首先使用你密钥导出一个整数,假设为i。然后
srand(i);
后面不断调用rand就可以了。
所以你采用rand()%32767所产生的随机数就已经是平均分布的啦。
Ⅶ c语言怎么产生一个之间的均匀分布随机数
假设要求一个在low~high之间的浮点型随机数
double
randomequalreal(double
low,double
high)//double型随机数生成器,low为下界,high为上界
{
return
((double)
rand()
/
rand_max)
*
(high-low)
+
low;}引用自karsten
kutza的adaline
Ⅷ 用MATLAB或C产生均匀分布,不调用任何函数!
产生0-1之间均匀分布的函数是然道rand(n);你要在不调用函数的情况下想解决该问题,那么就去看Matlab的rand函数的源代码吧。另一方面,在C下,内存中的数据本来就是随机的你编个程序建一个数组a[100000]数组还可以加大,b[1000]下面就简写了
j=0
for(i=0;i<100000;i++)
{
if(a[i]>0&&a[i]<1)
{
b[j]=a[i];
j++;
}
if(j==0)
break;
}
大致思想就这样了,可能那个地方还有错误,你要调试一下,就会得到你想要的程序了。由于时间限制,不能给你编好,见谅!
Ⅸ C语言如何生成(-1,1)之间的均匀分布的随机数
#include<random>
#include<iostream>
intmain()
{
std::random_devicerd;
std::mt19937gen(rd());
std::uniform_real_distribution<>dis(-1,1);
for(intn=0;n<10;++n){
std::cout<<dis(gen)<<'';
}
std::cout<<' ';
}
这个偶尔可能产生 -1。对此很在乎的话可以 #include <cmath> 然后把代码中的 -1 换成 std::nextafter(-1, +INFINITY)