c++产生浮点型随机数
时间: 2023-11-03 12:05:04 浏览: 51
要在 C 中生成浮点型随机数,你可以使用 `rand()` 函数以及一些数学库函数。下面是一个示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
// 设置随机数种子
srand(time(NULL));
// 生成浮点型随机数
float randomNum = (float)rand() / RAND_MAX;
printf("随机数: %f\n", randomNum);
return 0;
}
```
在这个示例中,`srand(time(NULL))` 用于设置随机数种子。然后,`(float)rand() / RAND_MAX` 会生成一个位于 [0,1] 范围内的浮点数。你可以根据需要进行调整,例如乘以某个值来扩大范围。
请注意,`rand()` 函数生成的随机数具有一定的局限性。如果你需要更高质量的随机数,可以考虑使用更强大的随机数生成器库,如 `random` 或者 `drand48`。
相关问题
opencv c++给视频添加椒盐噪声和高斯噪声
在 OpenCV 中,可以使用 `rand()` 函数生成随机数来给视频添加噪声。以下是分别添加椒盐噪声和高斯噪声的示例代码:
1. 椒盐噪声:
```cpp
void add_salt_pepper_noise(Mat& image, float snr)
{
int num_salt = static_cast<int>(image.total() * (1 - snr));
int num_pepper = static_cast<int>(image.total() * snr);
// 添加椒盐噪声
for (int i = 0; i < num_salt; ++i)
{
int row = rand() % image.rows;
int col = rand() % image.cols;
image.at<uchar>(row, col) = 255;
}
for (int i = 0; i < num_pepper; ++i)
{
int row = rand() % image.rows;
int col = rand() % image.cols;
image.at<uchar>(row, col) = 0;
}
}
```
2. 高斯噪声:
```cpp
void add_gaussian_noise(Mat& image, float mean, float stddev)
{
Mat noise(image.size(), CV_32F);
randn(noise, mean, stddev); // 生成高斯噪声
Mat temp;
image.convertTo(temp, CV_32F); // 将图像转换为浮点型
add(temp, noise, temp); // 添加噪声
temp.convertTo(image, CV_8UC1); // 转换回无符号8位整型
}
```
使用以上函数,可以在读取视频帧时,调用函数,对每一帧进行噪声处理后再显示出来,实现给视频添加噪声的效果。
C++随机生成n个100~900之间的随机浮点数(小数点后两位),并存储在一维数组中,试求出其中位数
以下是生成n个100~900之间的随机浮点数,并求出其中位数的示例代码:
```c++
#include <iostream>
#include <random>
#include <algorithm>
int main() {
const int n = 10;
float arr[n];
// 随机数生成器
std::random_device rd;
std::mt19937 gen(rd());
// 均匀分布
std::uniform_real_distribution<float> dis(100.0, 900.0);
// 生成随机浮点数
for (int i = 0; i < n; ++i) {
arr[i] = roundf(dis(gen) * 100) / 100; // 保留小数点后两位
std::cout << arr[i] << " ";
}
std::cout << std::endl;
// 求其中位数
std::sort(arr, arr + n);
float median;
if (n % 2 == 0) {
median = (arr[n/2 - 1] + arr[n/2]) / 2;
} else {
median = arr[n/2];
}
std::cout << "其中位数为: " << median << std::endl;
return 0;
}
```
在这个例子中,我们定义了一个大小为n的浮点型数组arr,并使用std::random_device和std::mt19937生成器生成随机数种子。然后,我们定义了一个uniform_real_distribution对象,并将其范围设置为100~900之间的浮点数。通过调用dis(gen)生成n个随机浮点数,并保存到数组arr中。
在求其中位数时,我们使用了std::sort函数将数组从小到大排序,然后根据n的奇偶性求出其中位数。如果n为偶数,则中位数为数组中间两个数的平均值。如果n为奇数,则中位数为数组中间的数。
这个例子中,我们使用了roundf函数将生成的浮点数保留小数点后两位。