Float OR Int范围内的随机数

时间:2013-10-08 22:44:13

标签: c++ algorithm gcc stl std

我正在创建一个模板函数对象,它将生成一个远程随机数。我知道如何为整数或浮点数做到这一点。但我的问题是我希望它能够生成T类型的远程随机数。

所以,因为我希望它能够返回浮点数和整数,所以我不能使用%运算符。这似乎适用于浮点值。但是,如果T是INT,那么它将会破坏范围。

return (_minValue + (T)rand() / ((T)RAND_MAX / (_maxValue - _minValue)));

在那个时刻我似乎无法找到的算法中肯定存在一些错误。

1 个答案:

答案 0 :(得分:1)

如果类型T是整数类型,(T)rand() / (T)RAND_MAX显然为零,​​除了rand()返回RAND_MAX(并且T发生的极少数情况至少为int),在这种情况下,它将是一个。请注意,rand()通常不是一个非常好的随机数生成器,尽管不同实现之间的质量差别很大。你可能最好只使用<random>库中的东西(对于我的正常工作,我很少需要随机数,即,我不知道如何立即使用该库中的组件)。

如果你坚持使用rand()你的最佳选择可能是确定整数和浮点不同的随机值,例如:

template <typename T, bool = std::is_floating_point<T>::value>
struct random;
template <typename T>
struct random<T, true> {
    static T generate() { return /* floating point formula goes here */; }
};
template <typename T>
struct random<T, false> {
    static T generate() { return /* integer formula goes here */; }
};

template <typename T>
T random_range() { return random<T>::generate(); }