免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: pmerofc
打印 上一主题 下一主题

[C] 初中级C语言水平自测:srand((int)time(0)); 有没有错? [复制链接]

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
81 [报告]
发表于 2012-10-13 23:53 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
82 [报告]
发表于 2012-10-14 00:00 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
83 [报告]
发表于 2012-10-14 00:02 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
84 [报告]
发表于 2012-10-14 00:06 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
85 [报告]
发表于 2012-10-14 00:12 |只看该作者
回复 84# pmerofc


    可能.太可能了.

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
86 [报告]
发表于 2012-10-14 00:20 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
2
技术图书徽章
日期:2013-09-04 15:21:51酉鸡
日期:2013-11-01 21:20:20
87 [报告]
发表于 2012-10-14 01:07 |只看该作者
回复 79# sonicling


只有32位系统存在2038问题,但随着64位的普及,这将不再是个问题,2038比千年虫问题要小很多。time之所以返回有符号,是因为用-1表示获取时间失败(没错,获取系统时间也会失败的,一切皆有可能)。在32位系统上time_t就是int型,转换成无符号,并不影响srand的功能实现。将time_t想象成浮点,只能是无知的表现。一群聪明的人设计出了生命力如此之长的OS,会脑残到用浮点表示秒数?time函数的岁数比坛子里很多人都大的。

论坛徽章:
0
88 [报告]
发表于 2012-10-14 01:15 |只看该作者
pmerofc 发表于 2012-10-14 00:06
问题在于不可能在“两秒滴答间隔之内”运行程序两次,更不可能更多次


我记得time_t是以秒为单位吧,2次time调用得到一个值似乎有可能...
再说现在都是都多CPU、多核,在加上多线程,一个时间片上在2个核心上被执行完全不是难事

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
89 [报告]
发表于 2012-10-14 01:16 |只看该作者
回复 78# pmerofc


    pm,我个人觉得吧,这个语句本身其实没有这么严重的问题,要正视错误对不对?srand这个语句,严格意义上来说,除了(int)以外的问题都是口味问题,而(int)转换——实践上不影响,因为目前我见过的机器都是unsigned -> signed ->unsigned 会还原的。而我见过的编译器在不能还原的时候都会给警告的(xxx到yyy的转换可能损失精度)。退一万步说,就算不还原也无所谓,因为srand需要的值本来就是不要求是啥,最后,0和1原则上不属于Magic Number。

最后,我个人建议这一句着重说口味,说明一下各种口味问题,但是口味问题也不要有倾向!别说这句写的是错的——事实上,implementation-defined也不是错……

论坛徽章:
0
90 [报告]
发表于 2012-10-14 01:19 |只看该作者
本帖最后由 hbmhalley 于 2012-10-14 01:26 编辑

回复 84# pmerofc


   
问题在于不可能在“两秒滴答间隔之内”运行程序两次,更不可能更多次


    没看仔细
    不知道"秒滴答"是个啥单位 ..
    2个 滴答 间当然不现实 // why?
    但我确实因为time()单位是 秒 而被折腾过 ..
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP