rmath.c

来自「redboy for gba 是BPNS为GBA编写的一个小软件。软件的邹形是B」· C语言 代码 · 共 159 行

C
159
字号
#include <CsAgb.h>
#include <math.h>
#include <rb_stdio.h>
double power10(double x)
{
	return pow(10,x);
}

double abs(double x)
{
	return (x<0?0-x:x);
}

int get_int(double x)
{
	return (x<0?(-1-(int)abs(x)):(int)x);
}

long str_to_int_num(char *exp)
{
	long res=0;
	u8 i=0;
	u8 flag=0;
	if (exp[i]=='-') {flag=1;i++;}
	while(exp[i]!='\0')
	{
		res=res*10+exp[i]-48;
		i++;
	}
	return (flag?0-res:res);
}

double str_to_num(char *exp)
{
	u8 i=0;
	u8 dot=0;
	u8 index=0;
	u8 str_len=0;
	long int_n=0;
	double float_n=0;
	int exp_n=0;
	double mpow=0.1;
	char temp[50];
	while (exp[i]!='\0')
	{
		if (exp[i]=='.') dot=i;
		else if(exp[i]=='E' || exp[i]=='e') index=i;
		i++;
	}
	str_len=i;
	if (dot>index && index) return 0.0;//出错啦
	if (index==0) index=str_len;
	if (dot==0) dot=index;
	for (i=0;i<dot;i++) temp[i]=exp[i];
	temp[dot]='\0';
	int_n=str_to_int_num(temp);//获得整数部分
	for (i=dot+1;i<index;i++)
	{
		float_n=float_n+(exp[i]-48)*mpow;
		mpow=mpow*0.1;
	}
	if (index!=str_len)
	{
		i=index+1;
		while (exp[i]!='\0')
		{
			temp[i-index-1]=exp[i];
			i++;
		}
		temp[i-index-1]='\0';
		exp_n=str_to_int_num(temp);
	}
	if (int_n<0) float_n=int_n-float_n;
	else float_n=float_n+int_n;
	return float_n*pow(10,exp_n);
}
double max(double x,double y)
{
   return x>y?x:y;
}
double min(double x,double y)
{
   return x>y?y:x;
}
double aver(double *num,u8 n)
{
   u8 i;
   double ave=0;
   for (i=0;i<n;i++) ave=ave+num[i];
   if (n) return ave/n;
   return 0;
}
double var(double *num,u8 n)
{
   u8 i;
   double ex=0,ex2=0;
   for (i=0;i<n;i++)
   {
      ex=ex+num[i];
      ex2=ex2+num[i]*num[i];
   }
   if (n) return  ex2/n-ex*ex/(n*n);
   return 0;
}
double aver_int(int *num,u8 n)
{
   u8 i;
   double ave=0;
   for (i=0;i<n;i++) ave=ave+num[i];
   if (n) return ave/n;
   return 0;
}
double var_int(int *num,u8 n)
{
   u8 i;
   double ex=0,ex2=0;
   for (i=0;i<n;i++)
   {
      ex=ex+num[i];
      ex2=ex2+num[i]*num[i];
   }
   if (n) return ex2/n-ex*ex/(n*n);
   return 0;
}
void sort(double *num,u8 n)
{
   u8 i,j;
   double temp;
   u8 max;
   for (i=0;i<n-1;i++)
   {
      max=0;
      for (j=0;j<n-i;j++)
      {
         if (num[max]<num[j]) max=j;
      }
      temp=num[j-1];
      num[j-1]=num[max];
      num[max]=temp;
   }
}
void sort_int(int *num,u8 n)
{
   u8 i,j;
   int temp;
   u8 max;
   for (i=0;i<n-1;i++)
   {
      max=0;
      for (j=0;j<n-i;j++)
      {
         if (num[max]<num[j]) max=j;
      }
      temp=num[j-1];
      num[j-1]=num[max];
      num[max]=temp;
   }
}

⌨️ 快捷键说明

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