windows 下的随机数太扯淡了

dukang2004 2013-09-24 02:35:01
stdlib.h
/* Maximum value that can be returned by the rand function. */

#define RAND_MAX 0x7fff //才3万多点


看看linux的

/* The largest number rand will return (same as INT_MAX). */
#define RAND_MAX 2147483647

这才靠谱啊
...全文
944 36 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjb_yd 2013-09-28
  • 打赏
  • 举报
回复
引用 13 楼 fetag 的回复:
[quote=引用 7 楼 zhao4zhong1 的回复:] [/code]
赵教主就别现眼了,先去科普下随机数的周期都和哪些因素有关吧~~ 这也不是衡量JJ呢,拼得越长越好~~[/quote]
TheMadMan 2013-09-26
  • 打赏
  • 举报
回复
围观+学习ing
majia2011 2013-09-26
  • 打赏
  • 举报
回复
这是参加那个会了吧,呵呵呵
dianyancao 2013-09-26
  • 打赏
  • 举报
回复
引用 34 楼 c090869 的回复:
[quote=引用 31 楼 dianyancao 的回复:] [quote=引用 29 楼 c090869 的回复:] [quote=引用 25 楼 dianyancao 的回复:] 假设随机数发生器产生0,1的概率相等,各为50% 怎么用最少的迭代次数生成概率各为1/3的0,1,2三个数?
很简单地, 00为0, 01为 1, 10为2, 11舍弃掉不用。[/quote] 这样每次两个位产生11的概率为1/4 若n次均出现重复的两个位为11,那么遇到这种情况的概率为(1/4)^n 能不能降低这个复杂度呢?[/quote] 还没有想到。[/quote] 谢谢啦
dianyancao 2013-09-26
  • 打赏
  • 举报
回复
引用 29 楼 c090869 的回复:
[quote=引用 25 楼 dianyancao 的回复:] 假设随机数发生器产生0,1的概率相等,各为50% 怎么用最少的迭代次数生成概率各为1/3的0,1,2三个数?
很简单地, 00为0, 01为 1, 10为2, 11舍弃掉不用。[/quote] 这样每次两个位产生11的概率为1/4 若n次均出现重复的两个位为11,那么遇到这种情况的概率为(1/4)^n 能不能降低这个复杂度呢?
FancyMouse 2013-09-26
  • 打赏
  • 举报
回复
引用 12 楼 fetag 的回复:
[quote=引用 10 楼 caozhy 的回复:] [quote=引用 2 楼 FancyMouse 的回复:] 有啥区别。你要知道理论研究里的随机数生成器只生成0和1,照样能撑起整个随机算法的世界。
没错,能生成0、1随机的理想随机数发生器可以构造任何随机数。[/quote] 你们是在混淆概念! theoretical of computer science 里面的随机数生成器只产生0,1是因为基于图灵机的模型,每次只产生一个比特位,此时还需要考虑output的bit length,组合在一起才能当PRNG。你们拿alpha当string,这是很不厚道的偷换概念! 楼主抱怨的没错!针对现在应用最广泛的随机数生成算法,无论是(truncated) linear congruential generator,还是polynomial pseudo-random number generator,如果模数太小,确实会导致周期变小。关于这个问题在<The Art of Computer Programming>第二卷3.2.1.1节有详细的介绍。 [/quote] lz可没抱怨周期太短。他只是纯粹在抱怨范围,看18L。 他要真抱怨周期的话,我当然是另一种回复。
c090869 2013-09-26
  • 打赏
  • 举报
回复
引用 31 楼 dianyancao 的回复:
[quote=引用 29 楼 c090869 的回复:] [quote=引用 25 楼 dianyancao 的回复:] 假设随机数发生器产生0,1的概率相等,各为50% 怎么用最少的迭代次数生成概率各为1/3的0,1,2三个数?
很简单地, 00为0, 01为 1, 10为2, 11舍弃掉不用。[/quote] 这样每次两个位产生11的概率为1/4 若n次均出现重复的两个位为11,那么遇到这种情况的概率为(1/4)^n 能不能降低这个复杂度呢?[/quote] 还没有想到。
c090869 2013-09-26
  • 打赏
  • 举报
回复
引用 25 楼 dianyancao 的回复:
假设随机数发生器产生0,1的概率相等,各为50% 怎么用最少的迭代次数生成概率各为1/3的0,1,2三个数?
很简单地, 00为0, 01为 1, 10为2, 11舍弃掉不用。
dukang2004 2013-09-25
  • 打赏
  • 举报
回复
引用 20 楼 rocktyt2 的回复:
[quote=引用 19 楼 u010188028 的回复:] [quote=引用 14 楼 nice_cxf 的回复:] 都是伪随机数,能差到那去呢,也就是linux生成一个随机数,windows要生成2个拼接一下而已,效率差点,就这么点区别。。。
very正解,就是这么解决。主要是要没注意到这个问题就傻帽了,数组有10万数据,要没注意这个问题3万开外的数据全取不到 (rand()*RAND_MAX+rand())% nsize[/quote]这个错了吧,你或许想写(RAND_MAX+1)?[/quote] 还是你更严谨
rocktyt 2013-09-25
  • 打赏
  • 举报
回复
引用 19 楼 u010188028 的回复:
[quote=引用 14 楼 nice_cxf 的回复:] 都是伪随机数,能差到那去呢,也就是linux生成一个随机数,windows要生成2个拼接一下而已,效率差点,就这么点区别。。。
very正解,就是这么解决。主要是要没注意到这个问题就傻帽了,数组有10万数据,要没注意这个问题3万开外的数据全取不到 (rand()*RAND_MAX+rand())% nsize[/quote]这个错了吧,你或许想写(RAND_MAX+1)?
dukang2004 2013-09-25
  • 打赏
  • 举报
回复
引用 14 楼 nice_cxf 的回复:
都是伪随机数,能差到那去呢,也就是linux生成一个随机数,windows要生成2个拼接一下而已,效率差点,就这么点区别。。。
very正解,就是这么解决。主要是要没注意到这个问题就傻帽了,数组有10万数据,要没注意这个问题3万开外的数据全取不到 (rand()*RAND_MAX+rand())% nsize
dukang2004 2013-09-25
  • 打赏
  • 举报
回复
引用 13 楼 fetag 的回复:
[quote=引用 7 楼 zhao4zhong1 的回复:] [/code]
赵教主就别现眼了,先去科普下随机数的周期都和哪些因素有关吧~~ 这也不是衡量JJ呢,拼得越长越好~~[/quote] 你这连题目都没看懂,假如数组有10万数据,要没注意这个问题3万开外的数据全取不到
dukang2004 2013-09-25
  • 打赏
  • 举报
回复
引用 6 楼 w13970061035 的回复:
你用得着随机这么大的数吗?
3万以外的随机数经常用啊,要没注意到这个真是要命,3万之外的数据全取不到 之前经常在linux下编程,同样的代码在linux下就没有问题
赵4老师 2013-09-25
  • 打赏
  • 举报
回复
CoCreateGuid Creates a GUID, a unique 128-bit integer used for CLSIDs and interface identifiers. HRESULT CoCreateGuid( GUID *pguid //Pointer to the GUID on return ); Parameter pguid [out] Pointer to the requested GUID on return. Return Value S_OK The GUID was successfully created. Win32 errors are returned byUuidCreate but wrapped as an HRESULT. Remarks The CoCreateGuid function calls the RPC function UuidCreate, which creates a GUID, a globally unique 128-bit integer. Use the CoCreateGuid function when you need an absolutely unique number that you will use as a persistent identifier in a distributed environment.To a very high degree of certainty, this function returns a unique value – no other invocation, on the same or any other system (networked or not), should return the same value. QuickInfo Windows NT: Use version 3.1 or later. Windows: Use Windows 95 or later. Windows CE: Unsupported. Header: Declared in objbase.h. Import Library: Included as a resource in ole32.dll. See Also UuidCreate
chen870201 2013-09-25
  • 打赏
  • 举报
回复
引用 2 楼 FancyMouse 的回复:
有啥区别。你要知道理论研究里的随机数生成器只生成0和1,照样能撑起整个随机算法的世界。
dianyancao 2013-09-25
  • 打赏
  • 举报
回复
引用 27 楼 rocktyt2 的回复:
[quote=引用 25 楼 dianyancao 的回复:] 假设随机数发生器产生0,1的概率相等,各为50% 怎么用最少的迭代次数生成概率各为1/3的0,1,2三个数?
最少我不知道,最方便的应该是生成0~3的随机数,随到3就重新随机,否则就输出了吧? 等更好的答案[/quote] 嗯,谢谢啦
nice_cxf 2013-09-25
  • 打赏
  • 举报
回复
都是伪随机数,能差到那去呢,也就是linux生成一个随机数,windows要生成2个拼接一下而已,效率差点,就这么点区别。。。
rocktyt 2013-09-25
  • 打赏
  • 举报
回复
引用 25 楼 dianyancao 的回复:
假设随机数发生器产生0,1的概率相等,各为50% 怎么用最少的迭代次数生成概率各为1/3的0,1,2三个数?
最少我不知道,最方便的应该是生成0~3的随机数,随到3就重新随机,否则就输出了吧? 等更好的答案
bwangel 2013-09-25
  • 打赏
  • 举报
回复
即使只能生成0,1两个数的随机数算法,经过适当的封装,也能生成任意宽度的随机数。 当然可能麻烦点,但你反过来想一想,如果你只要生成一个16位的随机数,却给你一个64位的,你不也要进行额外的处理么?
独孤过儿 2013-09-25
  • 打赏
  • 举报
回复
引用 7 楼 zhao4zhong1 的回复:
[/code]
赵教主就别现眼了,先去科普下随机数的周期都和哪些因素有关吧~~ 这也不是衡量JJ呢,拼得越长越好~~
加载更多回复(16)

70,022

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧