C++ rand() 模浮点数
c++ rand() modulo floating point numbers
在c ++中,我希望得到一个随机的浮点数。据我所知,典型的随机数生成是通过以下方式完成的:
rand() % 100
这将为您提供 0 到 99 之间的值
- 我想要的是
rand() % PI / 12
解释是 0 和 PI/12 之间的随机角度
提前感谢!
使用 C++11 <random>
解决方案可能如下所示:
#include <random>
#include <iostream>
int main()
{
const int length = 60;
std::random_device rd;
std::mt19937_64 mt(rd());
std::uniform_real_distribution<double> distribution(0, M_PI/12);
for(int i = 0; i < length; i++)
{
double d = distribution(mt);
std::cout << "d = " << d << std::endl;
}
}
你想做的是这样的:
double RealRand (double up_to)
{
return double(rand()) / RAND_MAX * up_to;
}
实际上,这样做是首先生成一个介于 0 和 1 之间的随机数(包括左边),然后将该数字缩放到 [0..up_to
]。(注意:以防万一您不知道,rand()
函数会生成 0 到 RAND_MAX
之间的随机整数。
但是,您不想这样做(至少)有两个原因。首先,rand()
通常是一个错误的随机数生成器。其次,在某些平台上(例如Visual C++),RAND_MAX
是一个非常小的数字(32767或其他数字),这导致生成的实际值的分辨率非常差。
强烈建议使用标头<random>
(较新的C++)中的工具。
相关文章:
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- C++浮点数据类型和字符串数据类型无法子到模板函数中
- 使用提升将数据从 PyObject 复制到浮点数 *
- 使用浮点数和双精度数的非常小数字的数学
- 使用英特尔内联函数将打包的 8 位整数乘以浮点数向量
- 如何在 c++ 中将小数点后两位数的浮点数分配给另一个浮点数
- 返回浮点数的小数位数
- txt 文件中浮点数的最大和最小值
- 为什么 std::cout 打印浮点数、双精度和长双精度到相同的小数精度?
- 将浮点数转换为无符号字符数组并打印出来
- 如何将时间字符串 (M:SS) 转换为浮点数
- 如何将浮点数(*)[6]转换为浮点**类型?
- C++将浮点数乘以分数
- 如何将浮点数转换为uint8_t?
- 将字符串转换为浮点数或整数,而无需使用内置函数(如 atoi 或 atof)
- 如何在C++(Arduino)中将浮点数组转换为字节数组
- 在数学上将浮点数四舍五入到 N 位小数
- Cython通过浮点数的最快方式,用于高频控制回路
- C++ rand() 模浮点数