📄 jn_math.h
字号:
#ifndef _jn_math_h_
#define _jn_math_h_
#include <math.h>
#include <stdlib.h> // for rand
int rand_int(int N)
{
double d;
d = rand();
d = d/RAND_MAX; // cast from 0 to 1
d = N*d;
return (int) d; // a floor operation (rounds magnitude down)
};
double rand_double(double N)
{
double d;
d = rand();
d = d/RAND_MAX; // cast from 0 to 1
d = N*d;
return d; // a floor operation (rounds magnitude down)
};
double AWGN_sample(void)
{
double u1, u2;
double r, theta;
u1 = rand();
u2 = rand();
u1 = rand()/RAND_MAX;
u2 = rand()/RAND_MAX;
r = sqrt(u1*u1 + u2*u2);
theta = atan2(u1,u2);
return r*cos(theta);
};
//performed with a truncated power series
#define TWO_DIV_SQRT_PI 1.12837916709551
#define ERF_EPS 1e-13
double abs(double x)
{
if(x < 0)
return -x;
else
return x;
};
double erf(double x)
{
double rtn_val;
int k;
int sign;
double x_sqrd;
double sum;
double k_fact;
double x_fact;
double err;
if(x > 4.5)
{
rtn_val = 1;
}
else
{
sum = 1;
sign = -1;
x_sqrd = x*x;
x_fact = 1;
k_fact = 1;
err = 1;
k = 1;
while(abs(err) > ERF_EPS)
{
k_fact = k_fact*k;
x_fact = x_fact * x_sqrd;
err = (sign*x_fact)/ k_fact / (2*k + 1);
sum += err;
sign = -sign;
k++;
}
rtn_val = x*sum*TWO_DIV_SQRT_PI;
}
if(rtn_val > 1)
{
rtn_val = 1;
}
return rtn_val;
};
double Q(double x)
{
double rtn_val;
double temp;
temp = x/sqrt(2);
rtn_val = 0.5 - 0.5*erf(x/sqrt(2.0));
return rtn_val;
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -