c语言arcsin
❶ 编程ARC一SEC是什么意思
编程ARC一SEC可理解为有关简易编程里的编译器特性的编程
编程ARC
ARC是一个编译器特性(Automatic Reference Counting),它为Objective-C对象提供自动内存管理机制。
编程SEC
Sec是Simple easy compile的缩写,中文名称“简易编程”,使用VB6编写的程序,语法参考了c语言和易语言,支持中英文混合编程。 Simple:简单 easy:容易 compile:编程 。
以下为arcsec在其他学科上的表达
数学上
arcsec是数学函数,反正割函数。是正割函数sec的反函数
arc,是反三角函数,比如说 arcsin1/2 =30° 意思是 多大的角的正弦为1/2
sec是正割,是余弦的倒数,比如:sec60°=1/cos60°
物理上
arcsec是弧度制的角度单位.
1弧度秒(arcsec)等于3600分之一弧度,就是0.01592度.
换算如下
1弧度等于57.3度,1弧度等于60弧分,1弧分等于60弧秒,所以1弧秒就是3600分之一弧度,就是0.01592度.
❷ 怎样用C语言表示反正弦,反余弦,反正切函数呢
计算反正切函数(使用欧拉变换公式,精度很高),反正切函数的级数展开公式:
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,m;
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++)
{
m = wrksp[j+1];
wrksp[j+1] = 0.5 * (wrksp[j] + tmp);
tmp = m;
}
if(fabs(wrksp[nterm + 1]) <= fabs(wrksp[nterm]))
{
*sum = *sum + 0.5 * wrksp[nterm + 1];
nterm = nterm + 1;
}
else
{
*sum = *sum + wrksp[nterm + 1];
}
}
}
级数计算就不用我给代码了吧。
❸ 用c语言求一个四元二次方程解的个数
提取公因式后 本题其实是一个一元三次方程
根据 三次方程新解法——盛金公式解题法 见http://ke..com/view/1382952.htm#4
编程如下
#include <stdlib.h>
#include <iostream.h>
#include <fstream.h>
#include <cmath>
#include <math.h>
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#define JINGDU double
#define MYSQRT(x) (JINGDU)sqrt((x))
#define ZERO 10e-6
#define MYSIN(x) (JINGDU)sin((x))
#define MYCOS(x) (JINGDU)cos((x))
#define ARCSIN(x) (JINGDU)asin((x))
#define ARCCOS(x) (JINGDU)acos((x))
JINGDU sqr3(JINGDU x)
{
if(x<0) {x=-x;return -(JINGDU)pow(x,1.0/3);}
else return (JINGDU)pow(x,1.0/3);
}
void x3fun(JINGDU a,JINGDU b,JINGDU c,JINGDU d)
{
JINGDU A=b*b-3*a*c,B=b*c-9*a*d,C=c*c-3*b*d,delta=B*B-4*A*C; //A=b^2-3ac;B=bc-9ad;C=c^2-3bd 总判别式:Δ=B^2-4AC。
JINGDU X1,X2,X3;
if(!A&&!B)//当A=B=0时,方程有一个三重实根
{
if(a)X1=X2=X3=-b/(3*a);
if(b)X1=X2=X3=-c/b;
if(c)X1=X2=X3=-d/c; //X1=X2=X3=-b/(3a)=-c/b=-3d/c
printf("%8f%8f%8f\n",X1,X2,X3);
JINGDU x=X1;
printf("%f",a*x*x*x+b*x*x+c*x+d);
return;
}
if(delta<ZERO&&delta>-ZERO)//当Δ=B^2-4AC=0时,方程有三个实根,其中有一个两重根;
{
JINGDU K=B/A;
X1=-b/a+K;
X2=X3=-K/2; //X1=-b/a+K;X2=X3=-K/2
printf("%8f%8f%8f\n",X1,X2,X3);
JINGDU x=X1;
printf("%f",a*x*x*x+b*x*x+c*x+d);
return;
}
if(delta>ZERO)//当Δ=B^2-4AC>0时,方程有一个实根和一对共轭虚根
{
JINGDU Y1=A*b+3*a*(-B+MYSQRT(B*B-4*A*C))/2;
JINGDU Y2=A*b+3*a*(-B-MYSQRT(B*B-4*A*C))/2;//Y1,Y2=Ab+3a(-B±(B^2-4AC)^(1/2))/2
X1=(-b-sqr3(Y1)-sqr3(Y2))/(3*a); //X1=(-b-(Y1)^(1/3)-(Y2)^(1/3))/(3a);
JINGDU real=(-2*b+sqr3(Y1)+sqr3(Y2))/(6*a);//X2,X3=(-2b+(Y1)^(1/3)+(Y2)^(1/3))/(6a)
JINGDU complex=MYSQRT(3)*(sqr3(Y1)-sqr3(Y2))/(6*a);//±3^(1/2)((Y1)^(1/3)-(Y2)^(1/3))i/(6a)
printf("%5f\t",X1);
printf("%f+%fi\t",real,complex);
printf("%f-%fi\t\n",real,complex);
JINGDU x=X1;
printf("%f",a*x*x*x+b*x*x+c*x+d);
return;
}
if(delta<ZERO)//当Δ=B^2-4AC<0时,方程有三个不相等的实根
{
JINGDU T=(2*A*b-3*a*B)/(JINGDU)pow(2*A,3/2);//T= (2Ab-3aB)/(2A^(3/2))
JINGDU xita=ARCCOS(T); //θ=arccosT
X1=(-b-MYSQRT(2*A)*MYCOS(xita/3))/(3*a);//X1=(-b-2A^(1/2)cos(θ/3))/(3a);
X2=(-b+MYSQRT(A)*(MYCOS(xita/3)+MYSQRT(3)*MYSIN(xita/3)))/(3*a);
X3=(-b+MYSQRT(A)*(MYCOS(xita/3)-MYSQRT(3)*MYSIN(xita/3)))/(3*a);
printf("%8f%8f%8f\n",X1,X2,X3);
JINGDU x=X1;
printf("%f",a*x*x*x+b*x*x+c*x+d);
return;
}
JINGDU x=X1;
printf("%f",a*x*x*x+b*x*x+c*x+d);
}
int main(int argc, char* argv[])
{
//myfilesum();
JINGDU a,b,c,d;
cin>>a>>b>>c>>d;
x3fun(a,b,c,d);
return 0;
}