mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-01 08:07:10 -04:00
102 lines
1.7 KiB
C++
102 lines
1.7 KiB
C++
|
|
||
|
#include <cmath>
|
||
|
#include <algorithm>
|
||
|
#include "Random.h"
|
||
|
|
||
|
void Random::bubbleSort(int a[], int size)
|
||
|
{
|
||
|
for(int pass=1; pass<size; pass++) {
|
||
|
for(int i=0;i<size-pass;i++)
|
||
|
if(a[i]>a[i+1]){
|
||
|
std::swap(a[i], a[i+1]);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
double Random::gauss(double sdev, double mean)
|
||
|
{
|
||
|
double sum=0.0;
|
||
|
for (int i=1;i<=12;++i)
|
||
|
{
|
||
|
seed_u = 1664525lu * seed_u + 123456789lu;
|
||
|
sum+=double(seed_u);
|
||
|
}
|
||
|
return (sum/4.29497e9-6.0)*sdev+mean;
|
||
|
}
|
||
|
|
||
|
double Random::uniform(double a, double b)
|
||
|
{
|
||
|
double t;
|
||
|
for(int i=0; i<10;i++){
|
||
|
seed=2045*seed+1;
|
||
|
//seed=seed -(seed/1048576)*1048576;
|
||
|
seed%=1048576;
|
||
|
}
|
||
|
t=seed/1048576.0;
|
||
|
t=a+(b-a)*t;
|
||
|
return(t);
|
||
|
}
|
||
|
|
||
|
int Random::uniform(int a, int b) // [a, b-1]
|
||
|
{
|
||
|
double t;
|
||
|
int i, tt;
|
||
|
if(b==a+1) return(a);
|
||
|
for(i=0; i<10;i++){
|
||
|
seed=2045*seed+1;
|
||
|
//seed=seed -(seed/1048576)*1048576;
|
||
|
seed%=1048576;
|
||
|
}
|
||
|
t=seed/1048576.0;
|
||
|
t=a+(b-a)*t;
|
||
|
tt=(int)t;
|
||
|
if(tt<a) tt=a;
|
||
|
else if(tt>=b) tt=b-1;
|
||
|
return(tt);
|
||
|
}
|
||
|
|
||
|
int Random::nonUniform(int a, int b) // [a, b-1]
|
||
|
{
|
||
|
double t;
|
||
|
int i, tt;
|
||
|
if(b==a+1) return(a);
|
||
|
for(i=0; i<10;i++){
|
||
|
seed=2045*seed+1;
|
||
|
//seed=seed -(seed/1048576)*1048576;
|
||
|
seed%=1048576;
|
||
|
}
|
||
|
t=seed/1048576.0;
|
||
|
t=a+(b-a)*pow(t, 0.6667); //t^1.5
|
||
|
tt=(int)t;
|
||
|
if(tt<a) tt=a;
|
||
|
else if(tt>=b) tt=b-1;
|
||
|
return(tt);
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
void m_uniform(int a , int b, long int *seed, int *itmp, int num)
|
||
|
{
|
||
|
int index, imed, i, k;
|
||
|
|
||
|
index=0;
|
||
|
itmp[0]=uniform(a, b, seed);
|
||
|
Loop1:
|
||
|
imed=uniform(a, b, seed);
|
||
|
k=0;
|
||
|
for(i=0;i<=index;i++)
|
||
|
if(imed==itmp[i]) {k=1; break;}
|
||
|
if(k==0) {index++; itmp[index]=imed;}
|
||
|
if(index<num-1) goto Loop1;
|
||
|
bubble(itmp, num); //bubble sorting
|
||
|
}
|
||
|
*/
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|