问题
#include <iostream>
#include <stdlib.h>
void main (int argc, char** argv)
{
float x;
for (int i = 0; i < 3; ++i)
{
x = 1024 * rand () / (RAND_MAX + 1.0f);
}
std::cout << x << std::endl;
}
在vs2015下运行几次都是相同的,Ubuntu下g++的运行得到数值和vs2015不一样,但也是每次运行结果相同。
解决
#include <iostream>
#include <time.h>
#include <stdlib.h>
int main (int argc, char** argv)
{
time_t t;
time(&t);
srand(t);
// 或者直接 srand(time(&t)); time()函数有两者返回值方式
float x;
x = rand()/(RAND_MAX+1.0f);
std::cout << x << std::endl;
}
需要使用srand()初始化随机数种子,种子一样产生的随机数就一样,有点像hash函数,输入相差一点,输出天差地别,一般使用time()获取当前时间作为随机数种子。