简体   繁体   中英

Using std::random_device can I set a range of floating point numbers but not include certain numbers?

As mentioned in the title I want to generate a random floating-point number between -10 and 10 but I want to make it so that it can't generate a number between -1.99 and 1.99.

My code for randomly generating numbers:

std::random_device random;
std::mt19937 gen(random());
std::uniform_real_distribution<float> dis(-10.0f, 10.0f);

for (int n = 0; n < 10; ++n)
{
    std::cout << dis(gen); << std::endl;
}

you can use std::piecewise_constant_distribution :

#include <iostream>
#include <random>
 
int main() {
  std::random_device rd;
  std::mt19937 gen(rd());
  // 50% of the time, generate a random number between -10.0f and -1.99f
  // 50% of the time, generate a random number between  1.99f and  10.0f
  std::vector<float> i{-10.0f,  -1.99f, 1.99, 10.0f};
  std::vector<float> w{1,  0,  1};
  std::piecewise_constant_distribution<float> dis(i.begin(), i.end(), w.begin());
  for (int n = 0; n < 10; ++n)
    std::cout << dis(gen) << std::endl;
}

Demo.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM