如何设置两个随机数,要求偏差值小于其平均值的15%
1个回答
展开全部
// 以下是一个C的实现
// 思路:设两个随机数为m,n。m直接随机产生。根据m和n的偏差值小于其平均值的15%:
// |m-n|<(m+n)/2*0.15
// 0.925/1.075*m<n<1.075/0.925*m,即a<n<b
// n=a+(0到b-a之间的随机数)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
void random(){
static bool b = 0;
if(!b){
srand(time(NULL));
b = true;
}
int m, n, left, right;
m = rand();//第一个随机数
left = (int)ceil(0.925/1.075*m);
right = (int)floor(1.075/0.925*m);
n = left + rand()%(right-left);//第二个随机数
printf("m:%d n:%d\n", m, n);
}
int main(int argc, int *argv[]){
int i;
for(i=0; i<10; ++i)
random();
system("pause");
return 0;
}
//希望采纳!如有问题,欢迎继续交流!
// 思路:设两个随机数为m,n。m直接随机产生。根据m和n的偏差值小于其平均值的15%:
// |m-n|<(m+n)/2*0.15
// 0.925/1.075*m<n<1.075/0.925*m,即a<n<b
// n=a+(0到b-a之间的随机数)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
void random(){
static bool b = 0;
if(!b){
srand(time(NULL));
b = true;
}
int m, n, left, right;
m = rand();//第一个随机数
left = (int)ceil(0.925/1.075*m);
right = (int)floor(1.075/0.925*m);
n = left + rand()%(right-left);//第二个随机数
printf("m:%d n:%d\n", m, n);
}
int main(int argc, int *argv[]){
int i;
for(i=0; i<10; ++i)
random();
system("pause");
return 0;
}
//希望采纳!如有问题,欢迎继续交流!
追问
高手,我看不懂啊,大体能够明白上面那段的意思,先随机产生m,然后根据m设置n的范围,再在这个范围里面产生随机的n,但是这样出来的m和n的差值还是有大于平均值15%的数字啊?我的具体问题是在excel里面要求产生m和n两个随机数,范围在0-0.35之间,然后m和n的差值小于平均值的15%,请指点,谢谢!
追答
excel? 下次记得问题说清楚啊!基本思路不变,第一行第一列,fx填
=RANDBETWEEN(1,35)/100
这是第一个随机数。
第一行第二列,fx填
=RANDBETWEEN(CEILING(0.925/1.075*A1,0.001)*1000,FLOOR(1.075/0.925*A1,0.001)*1000)/1000
第二列是三位小数,如果你想要两位把0.001变为0.01,1000变为100就行了。
拖动第一行第一列右下角的加号,得到第一列随机数;拖动第一行第二列的加号,得到对应第二列的随机数。这样的随机数都满足要求。很详细了,希望采纳!
科哲生化
2024-08-26 广告
2024-08-26 广告
你说的是饮用水标准吗?引起食品不安全的微生物因素主要是其中的致病菌,产毒菌以及腐败菌等,因此菌落总数这一指标并不能恰当的反映应用水的安全情况,而应当对水中的一些具体有害微生物进行限制;取消这一指标,也是与国际标准接轨;另外对这一指标加以控制...
点击进入详情页
本回答由科哲生化提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询