# Random number precision

I’m trying to generate random GPS locations withing a certain range; a square area defined using min and max positions.

For example:

``````float lat = ofRandom(51.954587, 51.992465);
float lon = ofRandom(5.891907, 5.964681);
ofLog() << lat << ", " << lon;
``````

This results in a position like:

``````51.9607, 5.89286
51.966, 5.91742
51.9899, 5.91362
51.9913, 5.93712
``````

As you can see the precision of the results is lower (maximum of 5 decimals) than the numbers entered into `ofRandom()` (6 decimals), meaning there is a larger chance of getting ending up with the same location, plus the resulting list of points is not as dense as I’d like it to be.

Does anyone know a way to generate numbers with a higher precision?

I just did a quick test and my impression is that it is actually the `cout` who is cropping the value contained in that float to a maximum of 5 decimals.

you can try:

``````ofLog() << ofToString(lat, 10) << ", " << ofToString(lon, 10);
``````

or:

``````std::cout.precision(20);
std::cout << lat << ", " << lon << std::endl;
``````

My float precision issues in c++ are a bit rusty, so I could be missing something. I would suggest looking at c++ forums if precision is really important to you.

It seems you’re right and `ofLog()` is indeed rounding the numbers while the actual `float`s contain numbers with more precision. I’m not quite sure how it decides to use 3/4/5/6 digits, but it doesn’t really matter.
Thanks for the feedback.