add more math function
git-svn-id: https://rt-thread.googlecode.com/svn/trunk@1420 bbd45198-f89e-11dd-88c7-29a3b14d5316
This commit is contained in:
parent
0050c8b708
commit
18476d9737
|
@ -166,3 +166,95 @@ double cos(double x)
|
|||
return result;
|
||||
}
|
||||
|
||||
static const int N = 100;
|
||||
|
||||
double coef(int n)
|
||||
{
|
||||
double t;
|
||||
|
||||
if (n == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
t = 1.0/n;
|
||||
|
||||
if (n%2 == 0)
|
||||
{
|
||||
t = -t;
|
||||
}
|
||||
|
||||
return t;
|
||||
}
|
||||
|
||||
double horner(double x)
|
||||
{
|
||||
double u = coef(N);
|
||||
int i;
|
||||
|
||||
for(i=N-1; i>=0; i--)
|
||||
{
|
||||
u = u*x + coef(i);
|
||||
}
|
||||
|
||||
return u;
|
||||
}
|
||||
|
||||
double sqrt(double b)
|
||||
{
|
||||
double x = 1;
|
||||
int step = 0;
|
||||
|
||||
while ((x*x-b<-0.000000000000001 || x*x-b>0.000000000000001) && step<50)
|
||||
{
|
||||
x = (b/x+x)/2.0;
|
||||
step++;
|
||||
}
|
||||
return x;
|
||||
}
|
||||
|
||||
double ln(double x)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (x > 1.5)
|
||||
{
|
||||
for(i=0; x>1.25; i++)
|
||||
{
|
||||
x = sqrt(x);
|
||||
}
|
||||
return (1<<i)*horner(x-1);
|
||||
}
|
||||
else if (x<0.7 && x>0)
|
||||
{
|
||||
for(i=0; x<0.7; i++)
|
||||
{
|
||||
x = sqrt(x);
|
||||
}
|
||||
return (1<<i)*horner(x-1);
|
||||
}
|
||||
else if(x > 0)
|
||||
{
|
||||
return horner(x-1);
|
||||
}
|
||||
}
|
||||
|
||||
double exp(double x)
|
||||
{
|
||||
double sum = 1;
|
||||
int i;
|
||||
|
||||
for(i=N; i>0; i--)
|
||||
{
|
||||
sum /= i;
|
||||
sum *= x;
|
||||
sum += 1;
|
||||
}
|
||||
return sum;
|
||||
}
|
||||
|
||||
double pow(double m, double n)
|
||||
{
|
||||
return exp(n*ln(m));
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue