C中怎么产生更加合理的随机数
C中可以使用rand()和srand(),但是当需要的随机数很小在10的-7方到10的-9时,产生的随机数一点都不合理,能有什么方法是随机数更合理吗?
double r = rand()%100 * 10e-9;
[解决办法]
srand((UINT)time(NULL));
double f;
for(int i = 0; i != 500; ++i)
{
// 随机产生一个0-1之间的小数
int n = rand()%1000;
if (n == 999) // 细节处理,否则永远不会随机到1
{
f = 1;
}
else
f = (rand()%1000+1)/(1000.0);
f *= 1.5 * 1E-8; // 结果乘以最大值即可
cout << f << endl;
}
如果你要一个的是范围在10的-7方到10的-9之间的随机数,你可以随一个0-100的随机数,然后除以10的-9
如果你说的是浮点数的误差的问题,那这个没有办法,你直接赋值一个浮点数都是有误差的
double a = 1.23f * 1e-10;
我这边显示的是1.2300000190734864e-010
[解决办法]
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
unsigned long ulrand(void) {
return (
(((unsigned long)rand()<<24)&0xFF000000ul)
[解决办法]
(((unsigned long)rand()<<12)&0x00FFF000ul)
[解决办法]
(((unsigned long)rand() )&0x00000FFFul));
}
int i;
unsigned long ul;
void main() {
srand(time(NULL));
for (i=0;i<10;i++) {
ul=ulrand();
printf("%010lu 0x%08x\n",ul,ul);
}
}
//2337588057 0x8b54c359
//1977377429 0x75dc6295
//3607316769 0xd7034921
//0009828482 0x0095f882
//3350859779 0xc7ba1003
//0945794621 0x385fae3d
//3400869024 0xcab524a0
//3097846779 0xb8a563fb
//4287421124 0xff8cdac4
//3934016258 0xea7c5302