c语言如何生成随机数
在C语言中,生成随机实数可以通过多种方式实现,下面我将详细介绍一种常用的方法,即使用线性同余生成器(LCG)算法,线性同余生成器是一种简单且广泛使用的伪随机数生成器,其原理是基于一个线性方程,通过改变种子(也称为初始值)来生成不同的随机数序列。
(图片来源网络,侵删)
我们需要了解线性同余生成器的公式:
Xn+1 = (aXn + c) % m
Xn 是当前的随机数,Xn+1 是要生成的下一个随机数,a、c 和 m 是常数,通常情况下,a、c 和 m 的值需要选择得足够复杂,以使得生成的随机数序列具有良好的统计特性,在本例中,我们将使用 a=1664525 和 m=2^321 作为参数。
接下来,我们需要定义一个函数来计算线性同余生成器的输出,这个函数接收一个种子作为输入,并返回一个随机实数,以下是一个简单的实现:
#include <stdio.h> #include <stdlib.h> #include <time.h> double random_real(long seed) { const long a = 1664525; const long c = 1013904223; const long m = (1L << 31) 1; long state = seed; state = (a * state + c) % m; return (double)state / m; }
现在我们已经实现了一个简单的随机实数生成器,接下来,我们需要使用 C 语言的 time.h 库来获取当前时间作为种子,这样可以确保每次运行程序时都会生成不同的随机数序列,以下是如何使用 time.h 库获取当前时间并作为种子的示例:
int main() { srand(time(NULL)); // 设置随机数种子为当前时间 double random_number = random_real(seed); // 生成一个随机实数 printf("随机实数: %f ", random_number); return 0; }
至此,我们已经实现了一个简单的 C 语言程序,用于生成随机实数,你可以根据需要对这个程序进行扩展,例如添加更多的功能或改进生成的随机数质量,希望这篇教程对你有所帮助!