主要是利用利用数学函数中的反三角函数。
创新互联公司专注于日土企业网站建设,响应式网站设计,购物商城网站建设。日土网站建设公司,为日土等地区提供建站服务。全流程按需定制开发,专业设计,全程项目跟踪,创新互联公司专业和态度为您提供的服务
1、头文件math.h中宏定义的是M_PI
#define M_PI 3.14159265358979323846
2、这是一个在库文件头文件math.h中的定义的宏,实际上就是圆周率π的一个近似值,约等于3.1415
下面是一个求三角函数sin(a)值的一个程序,这里就用到了M_PI这个宏。由于这里的a要求是弧度,所以对于输入的角的度数做了相应的转换。
#include stdio.h
#include math.h
int main()
{
int degree;
printf("Please input angle degree:\n");fflush(NULL);
scanf("%d",°ree);
printf("sin(%d)=%f\n",degree,sin(M_PI*degree/180));
return 0;
}
因为:头文件math.h中宏定义的是M_PI
扩展资料:
关于上述提到的M_PI
.M_PI 是一个宏定义,圆周率的定义
#define M_PI 3.14159265358979323846
此宏定义和编译器有关,TC中M_PI宏就定义在math.h里面。
但vc的math.h中没有了M_PI的宏定义。
常见宏定义:
#includebits/stdc++.h
#define _USE_MATH_DEFINES
using namespace std;
int main()
{
coutM_PIendl;
coutM_Eendl;
return 0;
}
#if defined(_USE_MATH_DEFINES) !defined(_MATH_DEFINES_DEFINED)
#define _MATH_DEFINES_DEFINED
#define M_E 2.71828182845904523536
#define M_LOG2E 1.44269504088896340736
#define M_LOG10E 0.434294481903251827651
#define M_LN2 0.693147180559945309417
#define M_LN10 2.30258509299404568402
#define M_PI 3.14159265358979323846
#define M_PI_2 1.57079632679489661923
#define M_PI_4 0.785398163397448309616
#define M_1_PI 0.318309886183790671538
#define M_2_PI 0.636619772367581343076
#define M_2_SQRTPI 1.12837916709551257390
#define M_SQRT2 1.41421356237309504880
#define M_SQRT1_2 0.707106781186547524401
#endif /* _USE_MATH_DEFINES */
输入:要在C语言中使用圆周率π值,一般使用宏定义或者常变量的方式实现。并根据精度要求,定义实际值。用三角函数可以打印出pi。cos(pi)=-1的,用反三角函数acos(-1.0)=pi。
标准的C语言中没有π这个符号及常量,一般在开发过程中是通过开发人员自己定义这个常量的,最常见的方式是使用宏定义:#definePI3.141592。
可以直接普通变量定义,如:doublepi=3.141592;C语言中,并不支持希腊字符π,而且,也不存在系统自带的π(圆周率值)。
C语言
一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。
尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的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,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];
}
}
}
级数计算就不用我给代码了吧。
反三角函数 得到的是弧度,除 圆周率乘 180 就得 度数。
如果要算很多个 反三角函数,你可以 建一个系数 r2d.
弧度 乘 r2d 得角度。
例如:
#include stdio.h
#include math.h
int main()
{
double x,y;
double pi=asin(1.0)*2.0;
double r2d=180.0/pi;
int i;
for (i=0;i5;i++){
x = i;
y=atan(x) * r2d;
printf("x=%g atan=%lf\n",x,y);
};
printf("==================\n");
for (i=0;i10;i++){
x = i * 0.1;
y=acos(x) * r2d;
printf("x=%g acos=%lf\n",x,y);
};
return 0;
}