I'm learning c++ and I'm trying to generate a random float and seem to be having some difficulties.
I start by making a random int(), newRandom, between -100 and 100, then I take that newRandom and turn it into a random float, rand_X, between -1.0 and 1.0. The only caveat is I don't want rand_X to be between -0.2 and 0.2, in other words,
-1.0 <= rand_X <= -0.2 and 0.2 <= rand_X <= 1.0.
Here's my code,
#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;
}
I usually set a break point at the closing bracket of main() and this is my output in the console window, -nan(ind)
As I said I'm learning the language so I'm probably doing something very silly. Thanks very much for your help!
for (int n = 0; n > 0; n++)? - almightyGOSUuniform_real_distribution? - awesoonfor (int n = 0; n > 0; n++) {fails then > 0condition the first time it's checked, so the loop never runs. Hence, your function executes noreturnstatement, and has undefined behaviour which ostensibly happened to manifest asNaNduring your testing. You can usefor ( ; ; )for a loop that runs untilreturn,break,goto,throw,exitetc. are encountered.... - Tony Delroymainfunction should return a value (0, usually). 3) pay attention to your comparisons, and whether or not something should be>or>=, especially if you invert them like in the answer provided. - paddy