33 lines
730 B
C++
33 lines
730 B
C++
#pragma once
|
||
#include <time.h>
|
||
#include <cmath>
|
||
namespace RandT {
|
||
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;
|
||
}
|
||
|
||
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 + sigma * Z;
|
||
} else {
|
||
Y = mean + Z;
|
||
}
|
||
return Y;
|
||
}
|
||
|
||
bool randomBool() { return 0 + (rand() % (1 - 0 + 1)) == 1; }
|
||
|
||
} // namespace RandT
|