⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mfcalc.y

📁 Linux/windows 环境下跨平台开发程序
💻 Y
📖 第 1 页 / 共 4 页
字号:
// more functionsstatic double sign(double v){	if(v > 0.0) return 1.0;	if(v < 0.0) return -1.0;	return 0.0;}static long idum=0;static double rand(double v){	return ran2(&idum);}static double srand(double v){	idum = (long)v;	return v;}static double factorial(double v){	return factrl((int)v);}static void close_arr_func(YYSTYPE *sr){	if(sr->a_data) free(sr->a_data);	sr->a_data = 0L;		sr->a_count = 0;}static double _strlen(YYSTYPE *sr, YYSTYPE *dst){	if(!sr || !sr->text) return 0.0;	return (double)strlen(sr->text);}#undef minstatic double min(YYSTYPE *sr) {	int i;	if(!sr || !sr->a_count) return 0.0;	if(sr->a_data && sr->a_data){		for(i = 1, sr->val = sr->a_data[0]; i < sr->a_count; i++) 			if(sr->a_data[i] < sr->val) sr->val = sr->a_data[i];		close_arr_func(sr);		}	return sr->val;}#undef maxstatic double max(YYSTYPE *sr) {	int i;	if(!sr || !sr->a_count) return 0.0;	if(sr->a_data){		for(i = 1, sr->val = sr->a_data[0]; i < sr->a_count; i++) 			if(sr->a_data[i] > sr->val) sr->val = sr->a_data[i];		close_arr_func(sr);		}	return sr->val;}static double count(YYSTYPE *sr){	if(!sr) return 0.0;	if(sr->a_data){		sr->val = (double)sr->a_count;		close_arr_func(sr);		}	else sr->val = 0.0;	return sr->val;}static double sum(YYSTYPE *sr) {	int i;	if(!sr) return 0.0;	if(sr->a_data){		for(i = 0, sr->val = 0.0; i < sr->a_count; i++) sr->val += sr->a_data[i];		close_arr_func(sr);		}	else sr->val = 0.0;	return sr->val;}static double calc_variance(double *values, int n){	int i;	double ss, d, mean = d_amean(n, values);	for(i=0, ss=0.0; i < n; i++) ss += ((d=values[i]-mean)*d);	return (ss/(n-1));}static double mean(YYSTYPE *sr) {	if(!sr) return 0.0;	if(sr->a_data && sr->a_count){		sr->val = d_amean(sr->a_count, sr->a_data );		close_arr_func(sr);		}	return sr->val;}static double gmean(YYSTYPE *sr) {	if(!sr) return 0.0;	if(sr->a_data && sr->a_count){		sr->val = d_gmean(sr->a_count, sr->a_data );		close_arr_func(sr);		}	return sr->val;}static double hmean(YYSTYPE *sr) {	if(!sr) return 0.0;	if(sr->a_data && sr->a_count){		sr->val = d_hmean(sr->a_count, sr->a_data );		close_arr_func(sr);		}	return sr->val;}static double quartile1(YYSTYPE *sr){	if(!sr) return 0.0;	if(sr->a_data && sr->a_count){		d_quartile(sr->a_count, sr->a_data, &sr->val, 0L, 0L);		close_arr_func(sr);		}	return sr->val;}static double quartile2(YYSTYPE *sr){	if(!sr) return 0.0;	if(sr->a_data && sr->a_count){		d_quartile(sr->a_count, sr->a_data, 0L, &sr->val, 0L);		close_arr_func(sr);		}	return sr->val;}static double quartile3(YYSTYPE *sr){	if(!sr) return 0.0;	if(sr->a_data && sr->a_count){		d_quartile(sr->a_count, sr->a_data, 0L, 0L, &sr->val);		close_arr_func(sr);		}	return sr->val;}static double variance(YYSTYPE *sr){	if(!sr) return 0.0;	sr->val = 0.0;	if(sr->a_data && sr->a_count){		sr->val = calc_variance(sr->a_data, sr->a_count);		close_arr_func(sr);		}	return sr->val;}static double stdev(YYSTYPE *sr){	if(!sr) return 0.0;	sr->val = 0.0;	if(sr->a_data && sr->a_count){		sr->val = sqrt(calc_variance(sr->a_data, sr->a_count));		close_arr_func(sr);		}	return sr->val;}static double sterr(YYSTYPE *sr){	if(!sr) return 0.0;	sr->val = 0.0;	if(sr->a_data && sr->a_count){		sr->val = sqrt(calc_variance(sr->a_data, sr->a_count))/sqrt(sr->a_count);		close_arr_func(sr);		}	return sr->val;}static double beta(YYSTYPE *sr){	if(!sr) return 0.0;	sr->val = 0.0;        if(sr->a_data && sr->a_count == 2){		sr->val = betaf(sr->a_data[0], sr->a_data[1]);		close_arr_func(sr);		}	else yyargserr("Wrong number of arguments\nin call to  beta(u, v).");	return sr->val;}static double _gammp(YYSTYPE *sr){	if(!sr) return 0.0;	sr->val = 0.0;        if(sr->a_data && sr->a_count == 2){		sr->val = gammp(sr->a_data[0], sr->a_data[1]);		close_arr_func(sr);		}	else yyargserr("Wrong number of arguments\nin call to  gammp(a, x).");	return sr->val;}static double _gammq(YYSTYPE *sr){	if(!sr) return 0.0;	sr->val = 0.0;        if(sr->a_data && sr->a_count == 2){		sr->val = gammq(sr->a_data[0], sr->a_data[1]);		close_arr_func(sr);		}	else yyargserr("Wrong number of arguments\nin call to  gammq(a, x).");	return sr->val;}static double _betai(YYSTYPE *sr){	if(!sr) return 0.0;	sr->val = 0.0;        if(sr->a_data && sr->a_count == 3){		sr->val = betai(sr->a_data[0], sr->a_data[1], sr->a_data[2]);		close_arr_func(sr);		}	else yyargserr("Wrong number of arguments\nin call to  betai(x, a, b).");	return sr->val;}static double _bincof(YYSTYPE *sr){	if(!sr) return 0.0;	sr->val = 0.0;        if(sr->a_data && sr->a_count == 2){		sr->val = bincof(sr->a_data[0], sr->a_data[1]);		close_arr_func(sr);		}	else yyargserr("Wrong number of arguments\nin call to  bincof(n, k).");	return sr->val;}static double binomdist(YYSTYPE *sr){	if(!sr) return 0.0;	sr->val = 0.0;        if(sr->a_data && sr->a_count == 3){		sr->val = binomdistf(sr->a_data[0], sr->a_data[1], sr->a_data[2]);		close_arr_func(sr);		}	else yyargserr("Wrong number of arguments\nin call to  binomdist(s, n, p).");	return sr->val;}static double normdist(YYSTYPE *sr){	if(!sr) return 0.0;	sr->val = 0.0;	if(sr->a_data && sr->a_count == 3){		sr->val = norm_dist(sr->a_data[0], sr->a_data[1], sr->a_data[2]);		close_arr_func(sr);		}	else yyargserr("Wrong number of arguments\nin call to  normdist(x, mean, SD).");	return sr->val;}static double norminv(YYSTYPE *sr){	if(!sr) return 0.0;	sr->val = 0.0;        if(sr->a_data && sr->a_count == 3) {		sr->val = distinv(norm_dist,sr->a_data[1], sr->a_data[2], sr->a_data[0], 2.0);		close_arr_func(sr);		}	else yyargserr("Wrong number of arguments\nin call to  norminv(p, mean, SD).");	return sr->val;}static double chidist(YYSTYPE *sr){	if(!sr) return 0.0;	sr->val = 0.0;	if(sr->a_data && sr->a_count == 2){		sr->val = chi_dist(sr->a_data[0], sr->a_data[1], 1.0);		close_arr_func(sr);		}	else yyargserr("Wrong number of arguments\nin call to  chidist(x, df).");	return sr->val;}static double chiinv(YYSTYPE *sr){	if(!sr) return 0.0;	sr->val = 0.0;        if(sr->a_data && sr->a_count == 2) {		sr->val = distinv(chi_dist,sr->a_data[1], 1.0, sr->a_data[0], 2.0);		close_arr_func(sr);		}	else yyargserr("Wrong number of arguments\nin call to  chiinv(p, df).");	return sr->val;}static double tdist(YYSTYPE *sr){	if(!sr) return 0.0;	sr->val = 0.0;	if(sr->a_data && sr->a_count == 2){		sr->val = t_dist(sr->a_data[0], sr->a_data[1], 1.0);		close_arr_func(sr);		}	else yyargserr("Wrong number of arguments\nin call to  tdist(x, df).");	return sr->val;}static double tinv(YYSTYPE *sr){	if(!sr) return 0.0;	sr->val = 0.0;        if(sr->a_data && sr->a_count == 2) {		sr->val = distinv(t_dist,sr->a_data[1], 1.0, sr->a_data[0], 2.0);		close_arr_func(sr);		}	else yyargserr("Wrong number of arguments\nin call to  tinv(p, df).");	return sr->val;}static double poisdist(YYSTYPE *sr){	if(!sr) return 0.0;	sr->val = 0.0;	if(sr->a_data && sr->a_count == 2){		sr->val = pois_dist(sr->a_data[0], sr->a_data[1], 1.0);		close_arr_func(sr);		}	else yyargserr("Wrong number of arguments\nin call to  poisdist(x, mean).");	return sr->val;}static double fdist(YYSTYPE *sr){	if(!sr) return 0.0;	sr->val = 0;	if(sr->a_data && sr->a_count == 3){		sr->val = f_dist(sr->a_data[0], sr->a_data[1], sr->a_data[2]);		close_arr_func(sr);		}	else yyargserr("Wrong number of arguments\nin call to  fdist(x, df1, df2).");	return sr->val;}static double finv(YYSTYPE *sr){	if(!sr) return 0.0;	sr->val = 0;	if(sr->a_data && sr->a_count == 3){		sr->val = distinv(f_dist,sr->a_data[1], sr->a_data[2], sr->a_data[0], 2.0);		close_arr_func(sr);		}	else yyargserr("Wrong number of arguments\nin call to  finv(p, df1, df2).");	return sr->val;}static double pearson(YYSTYPE *sr1, YYSTYPE *sr2, char *dest){	if(!sr1 || !sr2) return 0.0;	sr1->val = 0.0;        if(sr1->a_data && sr1->a_count > 1 && sr2->a_data && sr1->a_count == sr2->a_count){		sr1->val = sr2->val = d_pearson(sr1->a_data, sr2->a_data, sr1->a_count, dest, curr_data);		close_arr_func(sr1);		close_arr_func(sr2);		}	else yyargserr("Bad arguments in call to function\npearson(range1; range2 [;\"dest\"]).");	return sr1->val;}static double spearman(YYSTYPE *sr1, YYSTYPE *sr2, char *dest){	if(!sr1 || !sr2) return 0.0;	sr1->val = 0.0;        if(sr1->a_data && sr1->a_count > 1 && sr2->a_data && sr1->a_count == sr2->a_count){		sr1->val = sr2->val = d_spearman(sr1->a_data, sr2->a_data, sr1->a_count, dest, curr_data);		close_arr_func(sr1);		close_arr_func(sr2);		}	else yyargserr("Bad arguments in call to function\nspearman(range1; range2 [;\"dest\"]).");	return sr1->val;}static double regression(YYSTYPE *sr1, YYSTYPE *sr2, char *dest){	if(!sr1 || !sr2) return 0.0;	sr1->val = 0.0;	if(!(dest)) yyargserr("No destination range in call to function\nregression(range1; range2; \"dest\").");        if(sr1->a_data && sr1->a_count > 1 && sr2->a_data && sr1->a_count == sr2->a_count){		sr1->val = sr2->val = d_regression(sr1->a_data, sr2->a_data, sr1->a_count, dest, curr_data);		close_arr_func(sr1);		close_arr_func(sr2);		}	else yyargserr("Bad arguments in call to function\nregression(range1; range2; \"dest\").");	return sr1->val;}static double ttest(YYSTYPE *sr1, YYSTYPE *sr2, char *dest){	if(!sr1 || !sr2) return 0.0;	sr1->val = 0.0;        if(sr1->a_data && sr1->a_count > 1 && sr2->a_data && sr2->a_count > 1){		sr1->val = sr2->val = d_ttest(sr1->a_data, sr2->a_data, sr1->a_count, sr2->a_count, dest, curr_data);		close_arr_func(sr1);		close_arr_func(sr2);		}	else yyargserr("Bad arguments in call to function\nttest(range1; range2[;\"dest\"]).");	return sr1->val;}static double ftest(YYSTYPE *sr1, YYSTYPE *sr2, char *dest){	if(!sr1 || !sr2) return 0.0;	sr1->val = 0.0;        if(sr1->a_data && sr1->a_count > 1 && sr2->a_data && sr1->a_count > 1){		sr1->val = sr2->val = d_ftest(sr1->a_data, sr2->a_data, sr1->a_count, sr2->a_count, dest, curr_data);		close_arr_func(sr1);		close_arr_func(sr2);		}	else yyargserr("Bad arguments in call to function\nftest(range1; range2[;\"dest\"]).");	return sr1->val;}struct init{	int f_type;	unsigned int h_name;	double (*fnct)(double);};static struct init arith_fncts[] = {	{FUNC2, HashValue((unsigned char*)"pearson"), (double(*)(double))&pearson},	{FUNC2, HashValue((unsigned char*)"spearman"), (double(*)(double))&spearman},	{FUNC2, HashValue((unsigned char*)"regression"), (double(*)(double))&regression},	{FUNC2, HashValue((unsigned char*)"ttest"), (double(*)(double))&ttest},	{FUNC2, HashValue((unsigned char*)"ftest"), (double(*)(double))&ftest},	{AFNCT, HashValue((unsigned char*)"variance"), (double(*)(double))&variance},	{AFNCT, HashValue((unsigned char*)"stdev"), (double(*)(double))&stdev},	{AFNCT, HashValue((unsigned char*)"sterr"), (double(*)(double))&sterr},	{AFNCT, HashValue((unsigned char*)"min"), (double(*)(double))&min},	{AFNCT, HashValue((unsigned char*)"max"), (double(*)(double))&max},	{AFNCT, HashValue((unsigned char*)"count"), (double(*)(double))&count},	{AFNCT, HashValue((unsigned char*)"sum"), (double(*)(double))&sum},	{AFNCT, HashValue((unsigned char*)"mean"), (double(*)(double))&mean},	{AFNCT, HashValue((unsigned char*)"median"), (double(*)(double))&quartile2},	{AFNCT, HashValue((unsigned char*)"quartile1"), (double(*)(double))&quartile1},	{AFNCT, HashValue((unsigned char*)"quartile2"), (double(*)(double))&quartile2},	{AFNCT, HashValue((unsigned char*)"quartile3"), (double(*)(double))&quartile3},	{AFNCT, HashValue((unsigned char*)"gmean"), (double(*)(double))&gmean},	{AFNCT, HashValue((unsigned char*)"hmean"), (double(*)(double))&hmean},	{AFNCT, HashValue((unsigned char*)"tdist"), (double(*)(double))&tdist},	{AFNCT, HashValue((unsigned char*)"tinv"), (double(*)(double))&tinv},	{AFNCT, HashValue((unsigned char*)"poisdist"), (double(*)(double))&poisdist},	{AFNCT, HashValue((unsigned char*)"fdist"), (double(*)(double))&fdist},	{AFNCT, HashValue((unsigned char*)"finv"), (double(*)(double))&finv},	{AFNCT, HashValue((unsigned char*)"gammp"), (double(*)(double))&_gammp},	{AFNCT, HashValue((unsigned char*)"gammq"), (double(*)(double))&_gammq},	{AFNCT, HashValue((unsigned char*)"beta"), (double(*)(double))&beta},	{AFNCT, HashValue((unsigned char*)"betai"), (double(*)(double))&_betai},	{AFNCT, HashValue((unsigned char*)"bincof"), (double(*)(double))&_bincof},

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -