包含頭文件 math.h
公司專注于為企業(yè)提供成都做網(wǎng)站、網(wǎng)站建設(shè)、微信公眾號開發(fā)、商城網(wǎng)站開發(fā),成都小程序開發(fā),軟件按需網(wǎng)站制作等一站式互聯(lián)網(wǎng)企業(yè)服務(wù)。憑借多年豐富的經(jīng)驗,我們會仔細(xì)了解各客戶的需求而做出多方面的分析、設(shè)計、整合,為客戶設(shè)計出具風(fēng)格及創(chuàng)意性的商業(yè)解決方案,成都創(chuàng)新互聯(lián)更提供一系列網(wǎng)站制作和網(wǎng)站推廣的服務(wù)。
反3角函數(shù)有 acos(double),asin(double),atan(double),atan(double,double),
返回值 double 型,弧度值。轉(zhuǎn)角度要 *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;
}
開頭必須有一個數(shù)學(xué)函數(shù)庫?#includemath.h
然后一般常用的
sin(x)
cos(x)
tan(x)
其中的x必須要以弧度為單位。如果以“度”為單位,比如說求30度的正弦值,要用
sin(x*180/3.1415926)的形式
arcsin(x)
arccos(x)
arctan(x)
arccot(x)
以上四個則是相應(yīng)的反三角函數(shù),函數(shù)值的單位也是弧度。若要求arctan(1)的度數(shù),要用以下的形式:?arctan(1)*180/3.1415926
擴展資料
C語言的三角函數(shù)庫采用的單位都是弧度,如果要使用角度,就必須轉(zhuǎn)換,從角度轉(zhuǎn)換成弧度,或者是重寫一個三角函數(shù)庫。
在調(diào)用三角函數(shù)之前先把角度換算成弧度,調(diào)用反三角函數(shù)之后把弧度換算成角度就可以了。可以用 pi = 4.0 * atan(1) 算出pi,用 a = d /180.0*pi 轉(zhuǎn)換角度到弧度。
例如: sin(45 /180.0*pi); 就是計算的sin45。
參考資料:c語言 - 百度百科
在math.h中有三個求arcsin的函數(shù)如下:
double asin ( double x );
float asin ( float x );
long double asin ( long double x );
你看需要用就是了,返回x的相應(yīng)類型的arcsin值,在區(qū)間[-pi/2,+pi/2]上,弧度表示。
計算反正切函數(shù)(使用歐拉變換公式,精度很高),反正切函數(shù)的級數(shù)展開公式:
f(x) = x - x^3/3 + x^5/5 +...+ (-1)^k * x^(2k+1)/(2k + 1)+...
當(dāng)|x| 1時,級數(shù)絕對值發(fā)散,無法直接使用歐拉公式計算。因此可以通過下面的公式
進行等價轉(zhuǎn)換之后再進行計算。
等價轉(zhuǎn)換公式:
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];
}
}
}
級數(shù)計算就不用我給代碼了吧。
#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;
}
sacnf("%s",a);這個語句根本沒的用。就算輸入到a,也只會被當(dāng)成字符串來處理。
printf("%f",j);這個語句不知道是不是你寫錯了,j前面沒逗號。
你想想反余切的公式就可以編程 出來了,這個東西最好要自己實踐,別人幫你只是指導(dǎo)你,對你編程沒有實際的好處。