c 正态分布的随机数
时间: 2023-10-30 21:01:50 浏览: 156
您可以使用C语言的标准库函数来生成服从正态分布的随机数。具体来说,您可以使用`rand()`函数生成一个介于0和`RAND_MAX`之间的随机数,然后使用标准化的Z变量转换该随机数为正态分布的随机数。
以下是一个示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double random_normal(double mean, double std_dev) {
double u = rand() / (double)RAND_MAX; // 生成介于0和1之间的随机数
double v = rand() / (double)RAND_MAX; // 生成介于0和1之间的随机数
double z = sqrt(-2.0 * log(u)) * cos(2.0 * M_PI * v); // 使用Box-Muller转换
return mean + std_dev * z; // 应用均值和标准差进行缩放
}
int main() {
srand(time(NULL)); // 初始化随机数种子
double mean = 0.0; // 均值
double std_dev = 1.0; // 标准差
for (int i = 0; i < 10; i++) {
double random_num = random_normal(mean, std_dev);
printf("%f\n", random_num);
}
return 0;
}
```
在上面的示例中,`random_normal`函数接受均值和标准差作为参数,并返回一个服从该正态分布的随机数。在`main`函数中,我们生成了10个服从标准正态分布的随机数并打印出来。
请注意,这只是一个基本示例,可能不是非常高效或准确。如果您需要更复杂或高性能的正态分布随机数生成器,可以考虑使用第三方库,如GNU Scientific Library (GSL)。
阅读全文