#pragma once /** * @file RandT.h * @brief 随机数 * @author your name (you@domain.com) * @version 0.1 * @date 2023-12-22 * * Copyright: Baosight Co. Ltd. * DO NOT COPY/USE WITHOUT PERMISSION * */ #include #include namespace RandT { /** * @brief 生成指定范围内的随机数 * @tparam T * @param _min min * @param _max max * @return T */ template T RandT(T _min, T _max) { T temp; if (_min > _max) { temp = _max; _max = _min; _min = temp; } return rand() / (double)RAND_MAX * (_max - _min) + _min; } /** * @brief 生成高斯分布的随机数 * @param mean 均值 * @param sigma 标准差 * @return double */ double GuassRand(double mean = 0, double sigma = 0) { double U1 = rand() * 1.0f / RAND_MAX; // 0~1均匀分布 double U2 = rand() * 1.0f / RAND_MAX; // 0~1均匀分布 double Z = sqrt(-2 * log(U1)) * cos(2 * M_PI * U2); // 均值为0,方差为1的正态分布 double Y; if (sigma >= 0) { Y = mean + sqrt(sigma) * Z; } else { Y = mean + Z; } return Y; } } // namespace RandT