mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-01 08:07:10 -04:00
acd269fc97
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6561 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
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
|
|
}
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|