You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

glibc中rand()与random()函数是否相同及源码位置咨询

GNU/Linux中rand()与random()函数的疑问解答

提问内容

我目前正在研究PRNG(伪随机数生成器),发现在GNU/Linux系统中存在rand()和random()两个函数。根据《GNU C Library》第19.8.2节说明,random()函数仅用于兼容BSD系统。我有以下问题:

  • 这两个函数是否完全相同?
  • 若两者相同,random()的源码位于何处?我仅能在glibc中找到rand()的实现。

我尝试固定种子参数后,本地机器上rand()和random()生成的随机数序列一致。随后查找glibc中二者的实现,最终仅找到rand()的实现以及random()在stdlib/stdlib.h中的函数原型(非官方镜像),在Linux源码中也未找到random()的实现,想知道是否遗漏了内容。

附random()原型代码:

/* These are the functions that actually do things.  The `random', `srandom',
   `initstate' and `setstate' functions are those from BSD Unices.
   The `rand' and `srand' functions are required by the ANSI standard.
   We provide both interfaces to the same random number generator.  */
/* Return a random long integer between 0 and RAND_MAX inclusive.  */
extern long int random (void) __THROW;

解答内容

在glibc中rand()和random()完全相同。

原因是glibc的random.c文件中存在语句:

weak_alias (__random, random)

该语句借助GNU C扩展的alias特性,将random()设置为__random的弱别名,而rand()的底层实现也指向同一个__random函数,因此二者本质是同一个随机数生成器的不同接口。

内容的提问来源于stack exchange,提问作者ranvd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 07:27:15