当前位置: 首页 > news >正文

实现C语言中srand()和rand()函数

srand()和rand()的源代码

void __cdecl srand(unsigned int seed)
{_getptd()->_holdrand = (unsigned long)seed;
}int __cdecl rand(void)
{_ptiddata ptd = _getptd();return (((ptd->_holdrand = ptd->_holdrand * 214013L + 2531011L) >> 16) & 0x7fff);
}

分析机制:

        rand()函数每次都是根据seed来计算出随机数,seed在默认情况下是1,每次调用rand()函数会执行seed = seed * 214013L + 2531011L;
        srand()函数作用就是修改seed;

自己实现的my_srand(),my_rand()

static unsigned long seed_next = 1; // 静态全局变量,作为种子void my_srand(unsigned long seed) // 通过传不同的参数更改种子值,一般传time(NULL)
{seed_next = seed;
}int my_rand(void) // 将srand更改过的种子值通过公式计算出结果作为随机值
{seed_next = seed_next * 214013L + 2531011L;return ((seed_next >> 16) & 0x7fff);

补充应用

time_t time(time_t *seconds) 返回自纪元 Epoch(1970-01-01 00:00:00 UTC)起经过的时间,以秒为单位。如果 seconds 不为空,则返回值也存储在变量 seconds 中。

    time_t t;/* 初始化随机数发生器 */srand((unsigned) time(&t));

相关文章:

  • .NET Core接口IServiceProvider
  • iptables实战案例
  • 【.net core】【watercloud】树形组件combotree导入及调用
  • Asp.net Core 通过依赖注入的方式获取用户
  • itop-3568开发板机器视觉opencv开发手册-图像绘制-画线
  • 【p2p、分布式,区块链笔记 MESH】 论文阅读 Thread/OpenThread Low-Power Wireless Multihop Net
  • Mac/iOS 如何解压 RAR 格式压缩包:常用工具与详细操作步骤
  • 【vue3学习】vue3入门
  • Flink进阶之路:解锁大数据处理新境界
  • iOS上传应用包错误问题 “Invalid bundle. The “UIInterfaceOrientationPortrait”“
  • ios版本的Tiktok二次安装不上,提示:Unable to Install “TikTok”
  • 使用 Amazon Q Developer CLI 快速搭建各种场景的 Flink 数据同步管道
  • Monorepo架构: 项目管理模式对比与考量
  • UE 材质基础第三天
  • 第12节 Node.js 函数
  • UniApp 全生命周期钩子详解
  • docker镜像下载到本地,并导入服务器
  • 豆瓣图书评论数据分析与可视化
  • sylar--线程模块
  • 如何有效删除 iPhone 上的所有内容?
  • ecshop 网站价格/2022年关键词排名
  • 商洛免费做网站公司/广告传媒公司
  • 做戒指网站的logo照片/南昌seo排名
  • wordpress forum/seo站长综合查询
  • 怎么用vs做动态网站/seo优化网络推广
  • 网站建设所需的基本条件/湖南关键词优化排名推广