Tính e^x bằng khai triển taylor

Tại sao biến sum của mình nó lại giảm ở phần cuối đc nhỉ? Trong công thức mình viết thì đáng ra nó phải tăng dần chứ nhỉ. :frowning: Mãi ko nghĩ ra đc.

Đây là code của mình
#include <stdio.h>
#include <math.h>

int giai_thua(double n) {
    double result = 1;
    for (int i=1; i<=n; i++) {
        result=result*i;
    }
    return result;
}

int main() {
    double n=2;
    double x;
    double sum, sum_old;
    scanf("%lf", &x);
    sum=1+x;
    do {
        sum_old=sum;
        sum=sum + pow(x, n)/giai_thua(n);
        n++;
        /*printf("%f\n%f\n", sum_old, sum); */
    }
    while ((sum - sum_old) > 0.001);
    printf("%.4f", sum);
    return 0;
}

Hàm giai_thua() sao lại trả về int thế?

4 Likes

sao lại trả về int ạ

Đang hỏi bạn mà :slight_smile: int số ko lớn nên ko thể trả về được.

4 Likes

Hờ, bạn để nó trả về float, double hoặc long thử xem.

3 Likes

thường thì số vượt qua giới hạn của int thì số đó sẽ bị âm nếu mình nhớ đúng. Thử dùng long long xem

2 Likes

mình có trả về int đâu nhờ

Có đấy bạn ạ :smile:

4 Likes

mình thử rồi nó ra số to lắm

mình tưởng đấy là làm function nhỉ @@ để mình thử lại

Mình làm đc rồi nha, thay int thành double là đc @@ cảm ơn mn

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?