混合同余法产生[-1,1]随机数 C语言
时间: 2023-09-30 14:04:14 浏览: 76
对的,混合同余法是一种常见的用于产生随机数的方法。在C语言中,可以使用以下代码来实现产生范围在[-1,1]之间的随机数:
```c
#include <stdio.h>
unsigned int seed = 12345; // 种子,可以根据需要自定义
float random_float() {
seed = seed * 1103515245 + 12345;
unsigned int rand_num = (seed >> 16) & 0x7FFF; // 取低16位作为随机数
return ((float)rand_num / 32767.0) * 2 - 1; // 将随机数映射到[-1,1]范围
}
int main() {
for (int i = 0; i < 10; i++) {
float random_num = random_float();
printf("%f\n", random_num);
}
return 0;
}
```
在这段代码中,我们使用了一个32位的无符号整型变量`seed`作为种子,并且使用了线性同余法来更新种子。每次调用`random_float()`函数时,首先根据种子计算出一个32位的随机数,然后通过右移和与操作取出低16位作为随机数,并将其转换为浮点数。最后,将该随机数映射到[-1,1]的范围内。
请注意,这种方法虽然简单易用,但在某些情况下可能会出现一些随机性较差的问题。如果需要更高质量的随机数,可以考虑使用其他更复杂的随机数生成算法。
阅读全文