代码拉取完成,页面将自动刷新
#ifndef ZQ_CPP_LIB_NAIVE_RANDOM_HPP
#define ZQ_CPP_LIB_NAIVE_RANDOM_HPP
#include <stdint.h>
#ifdef __CUDACC__
#define CUDA_HOSTDEV __host__ __device__
#else
#define CUDA_HOSTDEV
#endif
namespace zq_cpp_lib{
typedef uint32_t RANDOM_INT;
class naive_random{
private:
RANDOM_INT _a=1103515245;
RANDOM_INT _c=12345;
RANDOM_INT _x;
protected:
RANDOM_INT _max = ~0;
double _max_double = static_cast<double>(_max);
public:
CUDA_HOSTDEV
void inline srand(const RANDOM_INT seed){
_x = seed;
rand();
}
CUDA_HOSTDEV
RANDOM_INT rand(){
_x = _a*_x + _c;
return _x;
}
};
template <typename T>
class naive_int_random: public naive_random{
private:
T _lowerbound, _upperbound, _boundrange;
public:
CUDA_HOSTDEV
naive_int_random(T lowerbound_=0, T upperbound_=128){
_lowerbound = lowerbound_;
_upperbound = upperbound_;
_boundrange = _upperbound - _lowerbound + 1;
}
CUDA_HOSTDEV
T operator()(){
return (static_cast<T>(rand())%_boundrange)+_lowerbound;
}
};
template <typename T>
class naive_real_random: public naive_random{
private:
T _lowerbound, _upperbound, _boundrange;
public:
CUDA_HOSTDEV
naive_real_random(T lowerbound_=0.0, T upperbound_=1.0){
_lowerbound = lowerbound_;
_upperbound = upperbound_;
_boundrange = _upperbound - _lowerbound;
_max_double = _max_double/_boundrange;
}
CUDA_HOSTDEV
T operator()(){
return static_cast<T>(static_cast<double>(rand())/_max_double);
}
};
}
#endif
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。