Ⅰ 怎麼用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)