我寫了一個程式,通過麥克勞林級數和庫函式計算cosx的值。見下文
#include<stdio.h>
#include<math.h>
#define N 20
int main()
{
float sum,y;
int x,i=0;
while(scanf("%d",&x)!=EOF)
{ sum=0;
for(i=0;i<=N;i )
{
y=pow(-1,i)*pow(x,2*i);
sum=sum y/((float)fact(2*i));
}
printf("using Maclaurin's series %.4f and original cosx=%.4f",sum,cos(x));
}
}
int fact(int x)
{
int prod=1;
int i=1;
for(i=1;i<=x;i )
prod=prod*i;
return prod;
}
當我輸入 5(或任何有效數字)時,結果就像這樣很奇怪
5
using Maclaurin's series -1.#IND and original cosx=0.2837
這是什么 -1.#IND?
uj5u.com熱心網友回復:
- 在呼叫它之前你需要函式原型。
- 添加一些
ifs 以檢查您是否不除以零。 scanf回傳成功掃描元素的數量。1在這種情況下檢查。
int fct = fact(2*i);
if(fct)
sum=sum y/(double)fct;
else
{printf("DIVISION BY ZERO!!!!\n"); return 1;}
你會發現這int對于階乘函式來說太小了。將其更改為雙倍。此外,在所有浮點運算中使用 double。
double fact(int x);
int main()
{
double sum,y;
int x,i=0;
double fct;
while(scanf("%d",&x) == 1)
{ sum=0;
for(i=0;i<=N;i )
{
y=pow(-1,i)*pow(x,2*i);
fct = fact(2*i);
if(fct != 0.0)
sum=sum y/fct;
else
{printf("DIVISION BY ZERO!!!!\n"); return 1;}
}
printf("using Maclaurin's series %.10f and original cosx=%.10f",sum,cos(x));
}
}
double fact(int x)
{
double prod=1.0;
int i=1;
for(i=1;i<=x;i )
prod=prod*i;
return prod;
}
https://godbolt.org/z/qsh4qh3d1
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/507883.html
