C的rand()使用哪些常用算法?

C的rand()使用哪些常用算法?,第1张

C的rand()使用哪些常用算法

看到这篇文章:http :
//en.wikipedia.org/wiki/List_of_random_number_generators

这是glibc的源代码

rand()

#include <stdlib.h>intrand_r (unsigned int *seed){  unsigned int next = *seed;  int result;  next *= 1103515245;  next += 12345;  result = (unsigned int) (next / 65536) % 2048;  next *= 1103515245;  next += 12345;  result <<= 10;  result ^= (unsigned int) (next / 65536) % 1024;  next *= 1103515245;  next += 12345;  result <<= 10;  result ^= (unsigned int) (next / 65536) % 1024;  *seed = next;  return result;}

来源:https
:
//sourceware.org/git/?p=glibc.git;a=blob_plain;f=
stdlib/
rand_r.c;hb=HEAD

如您所见,它只是简单地乘以一个加法和一个移位。仔细选择这些值,以确保不会重复RAND_MAX迭代的输出。

请注意,这是一个较旧的实现,已被更复杂的算法取代:https
:
//sourceware.org/git/?p=
glibc.git;a
=blob_plain;f=stdlib/random_r.c;hb=HEAD

如果链接断开,则Google为“ glibc rand_r”



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5652309.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存