鱼C论坛

 找回密码
 立即注册
查看: 3221|回复: 2

[吹水] C语言:rand()函数的算法是否有点...

[复制链接]
发表于 2023-2-6 01:04:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 额外减小 于 2023-2-6 13:08 编辑

让我们运行这个程序:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>

  4. int main()
  5. {
  6.         time_t t;
  7.         time(&t);
  8.         for(int i=0;i<100;i++)
  9.         {
  10.                 srand((unsigned)t);
  11.                 printf("%d\n",rand());
  12.                 t++;
  13.         }
  14.        
  15.         return 0;
  16. }
复制代码

将会得到一串很水的伪随机数列。如下:
  1. 28210
  2. 28213
  3. 28216
  4. 28219
  5. 28223
  6. 28226
  7. 28229
  8. 28233
  9. 28236
  10. 28239
  11. 28242
  12. 28246
  13. 28249
  14. 28252
  15. 28255
  16. 28259
  17. 28262
  18. 28265
  19. 28268
  20. 28272
  21. 28275
  22. 28278
  23. 28281
  24. 28285
  25. ...
复制代码

请问有大神可以说明根本的原因是什么吗?
如果rand()函数的返回值真的只是随着种子增大而不断加3/加4...
那是不是有点太奇怪了吧!
有人可以说明具体的算法是怎样的吗?


当然,做一些小小的改进后就会好很多。
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>

  4. int main()
  5. {
  6.         time_t t;
  7.         time(&t);
  8.         for(int i=0;i<100;i++)
  9.         {
  10.                 srand((unsigned)t);
  11.                 printf("%d\n",rand());
  12.                 t=t*(rand()%100)-rand()*2;
  13.         }
  14.        
  15.         return 0;
  16. }
复制代码
  1. 28957
  2. 27620
  3. 3391
  4. 18332
  5. 10773
  6. 23052
  7. 21548
  8. 19443
  9. 29158
  10. 20162
  11. 119
  12. 11227
  13. 13053
  14. 18288
  15. 30477
  16. 27599
  17. 16445
  18. 3221
  19. 1351
  20. 1083
  21. 27932
  22. 15503
  23. 4292
  24. 2912
  25. 27957
  26. 12361
  27. 4772
  28. 17276
  29. 16231
  30. ...
复制代码


谢谢解答
[/code]
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-2-6 08:38:32 | 显示全部楼层
C 标准库的 rand 确实是没有随机数质量保证的,但这里和您使用的方式有些奇怪应该也有关系
srand 设置 rand 的种子,一般不会像这样在短循环里重复设置多次

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
额外减小 + 1 + 1

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-6 12:23:35 | 显示全部楼层
dolly_yos2 发表于 2023-2-6 08:38
C 标准库的 rand 确实是没有随机数质量保证的,但这里和您使用的方式有些奇怪应该也有关系
srand 设置 ran ...

谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-24 14:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表