【发布时间】:2015-06-08 14:18:28
【问题描述】:
我正在学习 c++,我正在尝试生成一个随机浮点数,但似乎遇到了一些困难。
我首先创建一个介于 -100 和 100 之间的随机 int() newRandom,然后我将这个 newRandom 转换为一个介于 -1.0 和 1.0 之间的随机浮点数 rand_X。唯一需要注意的是我不希望 rand_X 介于 -0.2 和 0.2 之间,换句话说,
-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)
正如我所说,我正在学习语言,所以我可能正在做一些非常愚蠢的事情。非常感谢您的帮助!
【问题讨论】:
-
这是什么
for (int n = 0; n > 0; n++)? -
为什么不能直接使用
uniform_real_distribution? -
for (int n = 0; n > 0; n++) {在第一次检查时使n > 0条件失败,因此循环从不运行。因此,您的函数不执行return语句,并且具有未定义的行为,在您的测试期间表面上恰好表现为NaN。您可以使用for ( ; ; )循环,直到遇到return、break、goto、throw、exit等...... -
您应该注意的其他事项:1)您不应该每次都创建和播种新的生成器 - 使其成为静态的。 2) 你的
main函数应该返回一个值(通常是0)。 3)注意您的比较,以及是否应该是>或>=,特别是如果您像提供的答案中那样反转它们。 -
如何创建静态种子?我可以将它作为一个变量输入到 newRandow() 函数中吗?
标签: c++ random floating-point