在c中生成随机双数

新手上路,请多包涵

如何在 c++ 中生成两个双精度数之间的随机数,这些数字应该看起来像 xxxxx,yyyyy 。

原文由 Radi 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 647
2 个回答

就是这样

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

请记住每次程序启动时都使用适当的种子调用 srand()。

[编辑] 这个答案已经过时,因为 C++ 得到了它的原生非 C 随机库(参见 Alessandro Jacopsons 的答案)但是,这仍然适用于 C

原文由 rep_movsd 发布,翻译遵循 CC BY-SA 4.0 许可协议

这类似于我上面的答案,但应该适用于 C++11 及更高版本。

 #include <iostream>
#include <random>
#include <array>
#include <algorithm>
#include <functional>

/**
 * a function that will generate pseudo random numbers in a normal distribution
 * @param lb  is the lower bound of the distribution (inclusive)
 * @param ub  is the upper bound of the distribution (inclusive)
 * @return  a pseudo random number in the range [lb, ub]
 */
auto generate_random_double(double lb, double ub)
{
    std::random_device rd{};
    std::array<double, std::mt19937::state_size> seed_data{};
    std::generate(seed_data.begin(), seed_data.end(), std::ref(rd));
    std::seed_seq seq(std::begin(seed_data), std::end(seed_data));
    auto eng = std::mt19937{ seq };
    const auto randDouble = std::uniform_real_distribution<>{ lb,ub };
    return std::bind(randDouble, eng);
}

原文由 Ryan Zurrin 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏