十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
包含头文件 math.h
创新互联专注于海棠网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供海棠营销型网站建设,海棠网站制作、海棠网页设计、海棠网站官网定制、微信平台小程序开发服务,打造海棠网络公司原创品牌,更为您提供海棠网站排名全网营销落地服务。
反3角函数有 acos(double),asin(double),atan(double),atan(double,double),
返回值 double 型,弧度值。转角度要 *180.0/3.1416
例如:
#include stdio.h
#includestdlib.h
#includemath.h
int main()
{
double x=0.5;
printf("acos=%.2lf degrees\n",acos(x) * 180.0/3.1416);
printf("asin=%.2lf degrees\n",asin(x) * 180.0/3.1416);
printf("atan=%.2lf degrees\n",atan(x) * 180.0/3.1416);
printf("atan2=%.2lf degrees\n",atan2(1.0,2.0) * 180.0/3.1416);
return 0;
}
#include "math.h"
double fn[1000] = {1};
double f(int n) {
int i;
if (fn[n]) return fn[n];
for (i = 1; i = n; i++) {
if (fn[n-i]) {
int t = n-i+1;
while (t = n) {
fn[t] = fn[t-1]* t;
t++;
}
break;
}
}
return fn[n];
}
double C(double x, int n) {
int t = 2*n;
return f(t)*pow(x,t+1)/(pow(2, t) * f(n) * f(n) *(t+1));
}
double asin0(double x)
{
double res = 0, t;
int i = 0;
do {
t = C(x, i++);
res += t;
}while (t 1e-7);
return res;
}
int main() {
printf("%f", asin0(0.5));
return 0;
}
C语言中之数学函数
C语言提供了以下的数学函数,要使用这些函数时,在程序文件头必须加入:
#include
math.h
编译时,必须加上参数「-lm」(表示连结至数学函式库),例如「gcc
-lm
test.c」。
函数之自变量与传回之值型别见自变量或函数前之型别宣告。
函数已经在「math.h」或其它标头档宣告过了,因此在使用时不必再加型别宣告,例如「y=sin(x);」,不用写成「y=double
sin(double
x);」。
函数说明
double
sin(double
x)
x
的正弦函数值
double
cos(double
x)
x
的余弦函数值
double
tan(double
x)
x
的正切函数值
double
asin(double
x)
x
的反正弦函数值
sin-1x,x的值在
[-1,1]
之间,传回的值在
[-p/2,p/2]
之间
double
acos(double
x)
x
的反余弦函数值cos-1x,x的值在
[-1,1]
之间,传回的值在
[-p/2,p/2]
之间
double
atan(double
x)
x
的反正切函数值tan-1x,传回的值在
[-p/2,p/2]
之间
double
atan2(double
y,
double
x)
y/x
的反正切函数值tan-1(y/x),传回的值在
[-p,
p]
之间
double
sinh(double
x)
x
的双曲正弦函数值
double
cosh(double
x)
x
的双曲余弦函数值
double
tanh(double
x)
x
的双曲正切函数值
double
exp(double
x)
x
的指数函数
ex
double
log(double
x)
x
的自然对数
ln(x),x
double
log10(double
x)
x
底数为
10
的对数,log10x,x
double
pow(double
x,
double
y)
x
的
y
次方
xy
double
sqrt(double
x)
x
的根号值
√x
double
ceil(double
x)
不小于
x
的最小整数(但其型别为
double)
double
floor(double
x)
不大于
x
的最大整数(但其型别为
double)
int
abs(int
x)
整数
x
的绝对值
|x|
long
labs(long
x)
长整数
x
的绝对值
|x|
double
fabs(double
x)
实数
x
的绝对值
|x|
sacnf("%s",a);这个语句根本没的用。就算输入到a,也只会被当成字符串来处理。
printf("%f",j);这个语句不知道是不是你写错了,j前面没逗号。
你想想反余切的公式就可以编程 出来了,这个东西最好要自己实践,别人帮你只是指导你,对你编程没有实际的好处。
如果math.h库中没有的话,提供你一条思路,在数学手册上去查一下 arctan的级数展开式。我多年前曾用汇编编制过tan函数,就用此方法。
搜到一些公式,不知你以后是否会用,都写上了。
arctan x = x - x^3/3 + x^5/5 - ... (x≤1)
ex = 1+x+x2/2!+x3/3!+...+xn/n!+...
ln(1+x)= x-x2/3+x3/3-...(-1)k-1*xk/k+... (|x|1)
sin x = x-x3/3!+x5/5!-...(-1)k-1*x2k-1/(2k-1)!+... (-∞x∞)
cos x = 1-x2/2!+x4/4!-...(-1)k*x2k/(2k)!+... (-∞x∞)
arcsin x = x + 1/2*x3/3 + 1*3/(2*4)*x5/5 + ... (|x|1)
arccos x = π - ( x + 1/2*x3/3 + 1*3/(2*4)*x5/5 + ... ) (|x|1)
sinh x = x+x3/3!+x5/5!+...(-1)k-1*x2k-1/(2k-1)!+... (-∞x∞)
cosh x = 1+x2/2!+x4/4!+...(-1)k*x2k/(2k)!+... (-∞x∞)
arcsinh x = x - 1/2*x3/3 + 1*3/(2*4)*x5/5 - ... (|x|1)
arctanh x = x + x^3/3 + x^5/5 + ... (|x|1)
计算反正切函数(使用欧拉变换公式,精度很高),反正切函数的级数展开公式:
f(x) = x - x^3/3 + x^5/5 +...+ (-1)^k * x^(2k+1)/(2k + 1)+...
当|x| 1时,级数绝对值发散,无法直接使用欧拉公式计算。因此可以通过下面的公式
进行等价转换之后再进行计算。
等价转换公式:
a) ATan(1/x) = Pi/2 - ATan(x)
b) ATan(-x) = - ATan(x)
特殊情况
0 = ArcTan(0)
Pi/2 = ArcTan(无穷大)
//
// 欧拉公式
//
// sum是和,term是通项值,jterm初始为1,以后按1递增。wrksp是工作单元,视jterm的
// 最大值而定。
//
void eulsum(int nterm,double *sum,double term,int jterm,double wrksp[])
{
double tmp,dum;
if(jterm == 1)
{
nterm = 1;
wrksp[1] = term;
*sum = 0.5 * term;
}
else
{
tmp = wrksp[1];
wrksp[1] = term;
for(int j=1; j = nterm; j++)
{
dum = wrksp[j+1];
wrksp[j+1] = 0.5 * (wrksp[j] + tmp);
tmp = dum;
}
if(fabs(wrksp[nterm + 1]) = fabs(wrksp[nterm]))
{
*sum = *sum + 0.5 * wrksp[nterm + 1];
nterm = nterm + 1;
}
else
{
*sum = *sum + wrksp[nterm + 1];
}
}
}
级数计算就不用我给代码了吧。