2016-11-24 5 views
0

Ich versuche, ein Programm zu erstellen, das sin(x) gegebenen x und einen Wert n berechnen kann.Erhalte eine seltsame Ausgabe von der Berechnung sin (x)

I sin wissen kann wie folgt berechnet werden:

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

Aber der Ausgang gibt mir die gleiche Anzahl jedes Mal: ​​-2147483648.

Hier ist mein Code:

#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

Ein erster Blick auf 'factorial()' sagt mir, dass es immer '0' zurückgibt wegen' int facts = 0; 'das sollte' int facts = 1; 'sein. Anschließend läuft 'main() 'in eine Division durch Null ... – VCSEL

+0

Außerdem sollte die Schleife in' factional() 'mit' for (int i = 2; ......' aus dem gleichen Grund beginnen. – VCSEL

+0

Auch , haben factorial return ein double und deklarieren facts ein double. Dies wird erheblich erweitern den Bereich von "a", die lebensfähige factorials produzieren. Links zu einer Übung für das OP, wie groß "a" ist vor factorial() fehlschlägt. – doug

Antwort

2

facts auf 0 in Ihrer Funktion initialisiert wird factorial, so ist es immer 0. es zu 1. Den gleichen Initialisieren der Rückkehr geht mit der Schleife 0 bis beginnen, multipliziert mit factsi=0. Versuchen Sie:

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

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