我正在使用代码块13.12。我为以下问题制定了一个程序: -
将功能评估为0.0001%的准确度。 Sinx = x - (x ^ 3/3!)+(x ^ 5/5!) - .....
输入x的值后出错。 它说“AccuracyOfSinx.exe已停止工作”。
#include<stdio.h>
#include<conio.h>
#define ACCURACY 0.000001
int main()
{
int n, num, mulx, fac, rem;
float x,term, sum;
printf("Enter x = ");
scanf("%f", &x);
num=1;
sum=0;
mulx=1;
for(n=1, term=1; term>ACCURACY ; n++)
{
fac=num;
do
{
num=num-1;
fac=fac*num; /*Finds the factorial*/
mulx=mulx*x; /*Computes x raised to num*/
}
while(fac>0);
term = 1/fac;
num=num+2;
rem=n%2;
if(rem==0) /* -ve sign is given to even position*/
sum = sum-(mulx/fac);
if(rem!=0) /* +ve sign is given to odd position*/
sum = sum+(mulx/fac);
mulx = x;
}
printf("Sin(x)=%f", sum);
}
答案 0 :(得分:1)
主要问题在于:
b
这是一个除零的情况。我在此语句之前打印了 term = 1/fac;
的值,并在accuracy.exe停止工作之前打印fac
。
0
转到fac
的主要原因是
0
要防止出现这种情况,请先添加 num=num-1;
fac=fac*num;
条件以检查if
的值,然后再将其用于计算num
。