c语言生成正态分布的随机数
时间: 2023-07-31 15:10:28 浏览: 277
你可以使用C语言中的标准库函数来生成正态分布的随机数。具体步骤如下:
1. 包含头文件:`#include <stdio.h>` 和 `#include <stdlib.h>`。
2. 使用 `rand()` 函数生成一个介于0和 `RAND_MAX` 之间的随机数。
3. 将该随机数归一化到范围 [0, 1] 内,即除以 `RAND_MAX`。
4. 使用 Box-Muller 转换将归一化的随机数转换为正态分布的随机数。
下面是一个示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double generateNormalDistribution(double mean, double stddev) {
double u = (double)rand() / RAND_MAX; // 归一化到 [0, 1]
double v = (double)rand() / RAND_MAX; // 归一化到 [0, 1]
double z = sqrt(-2.0 * log(u)) * cos(2.0 * M_PI * v); // 使用 Box-Muller 转换
return mean + stddev * z;
}
int main() {
double mean = 0.0; // 正态分布的均值
double stddev = 1.0; // 正态分布的标准差
srand(time(NULL)); // 初始化随机数种子
for (int i = 0; i < 10; i++) {
double randomNum = generateNormalDistribution(mean, stddev);
printf("%f\n", randomNum);
}
return 0;
}
```
在上面的示例代码中,`generateNormalDistribution()` 函数接受正态分布的均值和标准差作为参数,并返回一个正态分布的随机数。`main()` 函数中的循环生成并打印了10个正态分布的随机数。
请注意,这只是一个简单的示例代码,生成的随机数可能不够精确。如果需要更精确的结果,可以考虑使用更复杂的随机数生成算法或者使用专门的数值计算库。
阅读全文