为什么两个正数相除变成负值了

img


我的输入是3,为什么我的左边的查看列表里面的single_value显示的是负值,明明给他赋值的fact(阶乘)和x_pow(次幂)都是正值,是超出类型限制了吗?以及怎么更改才能让single_value变成正常的正值


#include<stdio.h>
#include<math.h>
double x_pow(double x,int n){
    int i,x_pow = 1;
    for(i = 1;i <= n;i++){
        x_pow *= x;
    }
    return x_pow;
}
int fact(int n){
    int sum = 1,i;
    if(n == 0||n == 1) return 1;
    for(i = 1;i <= n;i++){
        sum *= i;
    }
    return sum;
}
void x_sin(double x){
    int sign = 1,k = 1,count = 0;
    double sin = 0;
    double single_value = 0;
    do{ 
        single_value = x_pow(x,k)/fact(k);
        sin += sign*single_value;
        k += 2;
        sign = -sign;
        count++;
    }while(single_value >= x_pow(0.1,5));
     printf("%.3lf\n%d",sin,count);
}
int main(){
    double x;
    scanf("%lf",&x);
    x_sin(x);
    return 0;
}

求 fac 溢出了,改成 long long 计算

img

  • 以下回答由chatgpt基于相关博客总结生成:

    该问题可能由于类型限制造成,将除数、被除数都转换成浮点型可以解决该问题。

    修改程序的代码实现如下:

    //将两个数转换为浮点型 double a = 3.0; double b = arr[idx]; double result = a / b;

    //输出时转换为正数 cout << abs(result) << endl;