随机浮动生成器
Random Float Generator
本文关键字:随机 更新时间:2023-10-16
我正在学习c++,我试图生成一个随机浮点数,似乎有一些困难。
我首先创建一个随机int(), newRandom,介于-100和100之间,然后我将该newRandom转换为一个随机浮点数,rand_X,介于-1.0和1.0之间。唯一需要注意的是我不希望rand_X在-0.2到0.2之间,也就是
-1.0 & lt; = rand_X & lt; = -0.2和0.2 & lt; = rand_X & lt; = 1.0。
这是我的代码,
#include "stdafx.h"
#include <iostream>
#include <random>
int newRandom() {
int newRandom = 0;
std::random_device rd; // obtain a random number from hardware
std::mt19937 eng(rd()); // seed the generator
std::uniform_int_distribution<> distr(-100, 100); // define the range
newRandom = distr(eng);
return newRandom;
}
float newRandomX() {
float rand_X = newRandom() / 100.0f;
for (int n = 0; n > 0; n++) {
if (rand_X < 0.0f && rand_X > -0.2f) {
rand_X = newRandom() / 100.0f;
}
else if (rand_X > 0.0f && rand_X < 0.2f) {
rand_X = newRandom() / 100.0f;
}
else {
return rand_X;
}
}
}
int main()
{
float dir_x = newRandomX();
std::cout << dir_x;
}
我通常在main()的右括号处设置一个断点,这是我在控制台窗口中的输出,-nan(ind)
正如我所说,我正在学习语言,所以我可能在做一些非常愚蠢的事情。非常感谢您的帮助!
将newRandomX()
更改为:
float newRandomX() {
float rand_X = newRandom() / 100.0f;
while(rand_X > -0.2f && rand_X < 0.2f) {
rand_X = newRandom() / 100.0f;
}
return rand_X;
}
输出:
0.75
-0.93
-0.43
-0.82
您当前的代码将只生成两个十进制数字(注意:舍入到浮点格式所支持的最接近的值)。为了获得更好的分布(即更多的数字),您应该将整数范围扩展到更大的范围,然后除以比100.0f更高的数字。
也不需要while-loop。我建议使用if语句。
假设你的newRandom生成一个范围为[-80:80]而不是[-100:100]的整数,那么你可以这样做:
float newRandomX() {
float rand_X = newRandom() / 100.0f;
if (rand_X < 0) {
rand_X = rand_x - 0.2;
} else {
rand_X = rand_X + 0.2;
}
return rand_X;
}
如上所述,我还建议使用更大的整数范围
相关文章:
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 为什么 Serial.println(<char[]>);返回随机字符?
- 字符串-C++后显示的随机字符
- 循环中的随机函数
- 在c++构造函数中使用随机字符串生成器
- 使用std::mt19937从字符串中返回一个随机单词
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- 如何在C++中高效地构造随机骰子
- 在类中使用随机生成器时出现性能问题
- 在将数字随机生成为数组期间从内存输出随机数的数组
- 将字符随机转换为大写的函数
- 为什么 vector 的随机访问迭代器给出与指针不同的内存地址?
- 如何生成一个随机的 n 位数,其中 n 是任意的
- 将随机生成的数字添加到数组 + 对这些数组求平均值
- 如何使用要传递给 mt19937 的可选随机种子参数设计函数
- 在C++中随机生成 20 个非重复数字
- GCC:随机构建导致执行期间分段错误
- 如何使用 SML 随机生成八进制元组
- 当我尝试使用它时,Scanf 会抛出一个随机异常(scanf_s 也是如此)
- 将正态随机变量与任意 RHO(corrcoef) 相关联