2016-11-24 20 views
0

Я пытаюсь создать программу, которая может вычислить sin(x) с учетом x и значением n.Получение странного результата при вычислении sin (x)

Я знаю, что грех может быть вычислена как:

x - x3/3! + x5/5! - x7/7! + x9/9!... 

Но выход дает мне тот же номер каждый раз, когда: -2147483648.

Вот мой код:

#include <iostream> 
#include <cmath> 
using namespace std; 

int factorial(int); 

int main() { 

    int ans = 0; 
    double x = 0; 
    int n = 0; 

    cout << "Enter x value: "; 
    cin >> x; 
    x = x * (3.14159/180); 
    cout << endl; 
    cout << "Enter n value: "; 
    cin >> n; 

    ans = pow(x, 1 + (2 * n))/factorial(1 + (2 * n)); 

    cout << ans << endl; 

    return 0; 
} 

int factorial(int a) { 
    int facts = 0; 

    for (int i = 0; i <= a; i++) { 
     facts *= i; 
    } 
    return facts; 
} 
+1

Первый взгляд на 'factorial()' говорит мне, что он всегда будет возвращать '0' из-за' int fact = 0; ', который должен быть' int fact = 1; '. Впоследствии 'main()' выполняет деление на ноль ... – VCSEL

+0

Кроме того, цикл в 'factorial()' должен начинаться с 'for (int i = 2; ......' по той же причине. – VCSEL

+0

Также , имеют факториальное возвращение двойным и объявляют факты двойным, что значительно расширит диапазон «а», который приведет к созданию жизнеспособных факториалов. Остается упражнение к ОП относительно того, насколько велика «а» до того, как факториал() терпит неудачу. – doug

ответ

2

facts инициализируется 0 в функции factorial, поэтому он всегда возвращается 0. Инициализировать его в 1. То же самое с ваш цикл, начиная с 0, умножая facts с i=0. Попытайтесь:

int factorial(int a) { 
    int facts = 1; 

    for (int i = 2; i <= a; i++) { 
     facts *= i; 
    } 
    return facts; 
}