首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >srand (time (null))导致编译器警告:隐式转换丢失整数精度

srand (time (null))导致编译器警告:隐式转换丢失整数精度
EN

Stack Overflow用户
提问于 2013-07-12 23:15:33
回答 2查看 38.2K关注 0票数 21

如果这个问题已经回答了,我深表歉意。

代码语言:javascript
运行
复制
#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int main () {

srand( time(NULL) );
cout << rand();
}

“隐式转换丢失整数精度:'time_t‘(也称为'long')到'unsigned int'”

是我在执行上面的代码时得到的错误消息。我使用的是xcode 4.6.1。现在,当我使用不同的编译器时,比如来自codepad.org的编译器,它可以很好地执行,生成看起来像是随机数的东西,所以我假设这是一个xcode问题,我需要解决?

我刚刚开始编程,所以在这方面我是一个完全的初学者。是我的代码有问题,还是我的编译器有问题?

任何帮助都将不胜感激!

EN

回答 2

Stack Overflow用户

发布于 2013-07-12 23:21:33

srand函数的参数类型为unsigned int,time_t为long类型。long中的高4个字节被去掉了,但它没有问题。srand将使用4个较低的时间字节随机化rand算法,因此您提供了比所需更多的数据。

如果出现错误,请尝试将time_t类型显式转换为unsigned int:

代码语言:javascript
运行
复制
srand( static_cast<unsigned int> time(NULL) );

另一件有趣的事情是,如果你在同一秒内运行你的程序两次,你会得到相同的随机数,这有时是不受欢迎的,因为如果你用相同的数据播种rand算法,它将生成相同的随机序列。或者,当您调试某些代码并需要再次测试相同的行为时,这可能是可取的……然后您只需使用类似于srand(123456)的代码

票数 5
EN

Stack Overflow用户

发布于 2013-11-22 03:20:14

代码语言:javascript
运行
复制
#include <stdlib.h>
#include <iostream>         //rand
#include <time.h>       //time

float randomizer(int VarMin, int VarMax){
    srand((unsigned)time(NULL));
        int range = (VarMax - VarMin);
        float rnd = VarMin + float(range*(rand()/(RAND_MAX + 1.0)));
return rnd;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17618264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档