eis/eqpalg/.do_not_use/utility-no-use/RandT.h

54 lines
1.1 KiB
C
Raw Permalink Normal View History

#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 <time.h>
#include <cmath>
namespace RandT {
/**
* @brief
* @tparam T
* @param _min min
* @param _max max
* @return T
*/
template <typename T>
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