注册 登录
编程论坛 C语言论坛

请大佬指导,计算题

秃头预备军 发布于 2022-03-11 08:51, 1683 次点击
#include <stdio.h>
#include <math.h>

double funcos( double e, double x );

int main()
{   
    double e, x;

    scanf("%lf %lf", &e, &x);
    printf("cos(%.2f) = %.6f\n", x, funcos(e, x));
   
    return 0;
}

double funcos( double e, double x )
{
    int numerator,denominator,flag,i;
    double item,sum;
    i=1;
    flag=-1.0;
    denominator=2;
    numerator=x*x;
    sum=0;
    do
    {
        item=flag*numerator/denominator;
        sum=sum+item;
        numerator=numerator*x*x;
        denominator=denominator*(denominator+1)*(denominator+2);
        flag=-flag;
    }while(fabs(item)>=e);
    return sum;
}//输入0.01 -3.14 为什么得不到-0.999899
4 回复
#2
apull2022-03-11 10:21
item=flag*numerator/denominator;
参与运算的3个变量都是整型,结果也是整型
#3
rjsp2022-03-11 13:08
下次直接把题目贴出来,你那个“3.14”我猜不出是 角度 还是 弧度,在这道题中PI是不是以3.14计算

程序代码:
#include <stdio.h>

const double pi = 3.14159265358979323846;

// cos(x) = x^0/0! - x^2/2! + x^4/4! - x^6/6! + ... + (-1)^n*x^2n/(2n)!
double mycos( double x, double precision )
{
    double result = 1;

    double item = 1;
    for( int i=1; item>=precision; ++i )
    {
        item *= x*x/(2*i-1)/(2*i);
        result += (1-i%2*2)*item;
    }

    return result;
}

int main( void )
{   
    double cos_0 = mycos( 0 * pi/180, 0.000001 );
    printf( "cos(0angle) = %f, should be 1.000000\n", cos_0 );

    double cos_30 = mycos( 30 * pi/180, 0.000001 );
    printf( "cos(30angle) = %f, should be 0.866025\n", cos_30 );

    double cos_45 = mycos( 45 * pi/180, 0.000001 );
    printf( "cos(45angle) = %f, should be 0.707107\n", cos_45 );

    double cos_60 = mycos( 60 * pi/180, 0.000001 );
    printf( "cos(60angle) = %f, should be 0.500000\n", cos_60 );

    double cos_90 = mycos( 90 * pi/180, 0.000001 );
    printf( "cos(90angle) = %f, should be 0.000000\n", cos_90 );

    return 0;
}
#4
zzs39042022-03-13 11:48
#5
czw20112022-03-26 16:55
精度问题
1