Hi zusammen!
Ich studiere jetzt im ersten Semester Medieninformatik und wir müssen für das Fach "Einführung in die Programmierung" verschiedene Übungen bearbeiten. Eine Übung ist, den Sinus eines Winkels mit der Formel sin x = x – x^3/3! + x^5/5! - x^7/7! + ... zu berechnen (in C). Die Rechnung soll abgebrochen werden, "wenn der Wert des nächsten Ausdrucks kleiner als 10^-5 wird". Wär schön gewesen, wenn der Prof dazugeschrieben hätte, welcher Ausdruck genau gemeint ist. Ich bin jetzt vom Quotienten x^3/3! etc. ausgegangen.
Ich habe jetzt eine Funktion geschrieben, die soweit eigentlich funkioniert, allerdings nur für Winkel von 1° bis ca. 34°.. ab 41° wird das Ergebnis dann richtig ungenau und schießt exponentiell in die Höhe.
Entweder habe ich irgendwo doch einen Logikfehler in der Rechnung oder ich überseh etwas anderes. Wäre cool, wenn mir jemand einen Hinweis geben könnte, in welche Richtung ich da denken muss, was ich verändern müsste (braucht also keine komplette Lösung des Problems sein, ein wenig muss ich ja auch selbst denken
).
Hier noch mein Quellcode:
LG,
Malte
Ich studiere jetzt im ersten Semester Medieninformatik und wir müssen für das Fach "Einführung in die Programmierung" verschiedene Übungen bearbeiten. Eine Übung ist, den Sinus eines Winkels mit der Formel sin x = x – x^3/3! + x^5/5! - x^7/7! + ... zu berechnen (in C). Die Rechnung soll abgebrochen werden, "wenn der Wert des nächsten Ausdrucks kleiner als 10^-5 wird". Wär schön gewesen, wenn der Prof dazugeschrieben hätte, welcher Ausdruck genau gemeint ist. Ich bin jetzt vom Quotienten x^3/3! etc. ausgegangen.
Ich habe jetzt eine Funktion geschrieben, die soweit eigentlich funkioniert, allerdings nur für Winkel von 1° bis ca. 34°.. ab 41° wird das Ergebnis dann richtig ungenau und schießt exponentiell in die Höhe.
Entweder habe ich irgendwo doch einen Logikfehler in der Rechnung oder ich überseh etwas anderes. Wäre cool, wenn mir jemand einen Hinweis geben könnte, in welche Richtung ich da denken muss, was ich verändern müsste (braucht also keine komplette Lösung des Problems sein, ein wenig muss ich ja auch selbst denken

Hier noch mein Quellcode:
Code:
#include <stdio.h>
#include <conio.h>
#include <math.h> // für die Sinus-Berechnung
int main(void) {
int i, j, k;
float sinuswink;
long double rechnung, fak, xwink, final, pot, quot, testq=1;
printf("BERECHNEN DES SINUS VOM WINKEL x");
do {
printf("\n\nDieses Programm berechnet den Sinus vom Winkel x.\n\nBitte geben Sie einen Winkel ein: ");
scanf_s("%lf",&xwink);
pot=xwink;
quot=1;
rechnung=0;
for(i=3;quot>0.00005||quot<-0.00005;i=i+2) {
// Fakultät
fak=1;
for(j=1;j<=i;j++) fak=j*fak;
// Potenz von x
xwink=pot;
for(k=1;k<i;k++) xwink=xwink*pot;
// Vorzeichen von quot bestimmen
if(quot > 0) {
quot=xwink/fak;
quot=-quot;
} else {
quot=xwink/fak;
}
rechnung=rechnung+quot;
}
// Komplette Sinus-Rechnung
final=pot+rechnung;
// Überprüfung mit Funktion aus math.h
sinuswink = (float)sin((float)pot);
printf("sin(x) = %.5lf\n\n",final);
printf("sin(x) = %.5lf\n\n",sinuswink);
printf("\nBeliebige Taste zum Fortfahren druecken. \"n\" beendet das Programm.\n\n");
} while(_getch()!='n');
return(0);
}
LG,
Malte

Zuletzt bearbeitet: