How to get a random number from 0 to 1700 per line?

I am currently working with

double fRand(double fMin, double fMax)
{
    double f = (double)rand() / RAND_MAX;
    return fMin + f * (fMax - fMin);
}

double RangeFinder::getRange(void) {
  return fRand(0, 1700);
};


char range[12];
double r = rangeFinder.getRange();
snprintf(range, 11, "range: %d", r);

But it does not give me between 0, 1700giving it to me between -99, 999(I think). I have the feeling that msb interprets thousands as negative.

What is the fix?


Edit

fixed version

double fRand(double fMin, double fMax)
{
    double f = (double)rand() / RAND_MAX;
    return fMin + f * (fMax - fMin);
}

double RangeFinder::getRange(void) {
  return fRand(0, 1700);
};



char range[22];
int r = rangeFinder.getRange();
snprintf(range, 22, "range: %i    ", r);
LCDString(range);

the second argument snprintfwas 11 .. too short. after the number there were no white characters to remove the previous values, but double rit was necessary to distinguish int r.

+3
source share
2 answers

A possible problem is that it is "%d"used for integers. To print float / doubles, you must use "%f"(float) or "%lf"(doubles or floats for a long time).

+5

: . rand() , , rand() ++ ++ 11.

fRand

#include <random>

double fRand(double fMin, double fMax)
{
    std::random_device rd;

    std::mt19937 e2(rd());
    std::uniform_real_distribution<> dist(fMin, fMax);

    return dist(e2);
}

( ) ,

  • std:: uniform_real_distribution i, [fMin, fMax), - .

  • , , .

+3

All Articles