Tính sin(x) theo khai triển Maclaurin

Em có viết chương trình như này rồi ạ

#include<iostream>
#include<cmath>
int giai_thua(int x)
{
    int giai_thua=1;
    for (int i=1; i<=x; i++){
        giai_thua*=i;
    }
    return giai_thua;
}
int main()
{
    int n=8;
    double sinx=0, x;
    std::cout<<"Nhap goc x muon tinh: ";
    std::cin>>x;
    for (int i=0; i<=n; i++){
        sinx +=pow(-1, i)*(pow(x, 2*i+1)/giai_thua(2*i+1));
    }
    std::cout<<"sin("<<x<<")=  "<<sinx;
}

Theo khai triển Maclaurin thì chương trình của em vẫn cho giá trị của sinx đúng khi khai triển đến n=5, nhưng đến n=6 thì lại sai ạ.
Mọi người cho em hỏi là tại sao đến n=6 nó mới sai ạ.
Em xin cảm ơn.

giai_thua(2*i+1) là 13!, cỡ 6 tỷ, mà kiểu số nguyên int chỉ chứa được tới 2 tỷ mấy là hết

4 Likes

Em cảm ơn nhiều ạ…:3

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