ERLEDIGT
NEIN
NEIN
ANTWORTEN
7
7
ZUGRIFFE
569
569
EMPFEHLEN
-
04.11.11 16:47 #1
Hi,
ich habe folgendes Problem:
Mein Prof hat mir die Aufgabe gestellt eine Methode zur Cosinus Funktion zu schreiben, welche die Berechnung abbricht, sobald der Summand nur noch an der 8. Stelle verändert wird.
Dabei soll ich den Cosinus der Werte (0,-1,1,1000) ausgeben.
Mit 0,-1 und 1 funktioniert auch alles wunder bar, auch 2 geht, doch bei allem darüber geht nichts mehr und das Programm gibt ab der Ausgabe des letzten funktionierenden Ergenisses nichts mehr aus, auch keine folgenden System.out Ausgaben.
Kann da einer von euch mal drüberschauen? Ich bin da echt am verzweifeln.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
public class cosinustest3 { /** * @param args */ public static double EPSILON = 1E-8; //Fakultät public static long Fakultaet(int max) { long fakultaet = 1; for (int x = 1; x <= max; x++) { fakultaet = fakultaet * x; } return fakultaet; } //Cosinusberechnung public static float cosinus(float x, int n) { float result = 0; double z = 0; for (int i = 0; i <= n; i++) { z = ( (Math.pow(x, (float)2*i))/(float)Fakultaet(2*i)) * Math.pow((float)-1, (float)i); result += z; } while (Math.abs(z) > EPSILON); return result; } public static void main(String[] args) { // TODO Auto-generated method stub //Ausgabe der Ergebnisse // Cosinus nach Berechnung System.out.println("Berechnung"); System.out.println("cos(0) = " + cosinus(0,8)); System.out.println("cos(1) = " + cosinus(1,8)); System.out.println("cos(-1) = " + cosinus(-1,8)); System.out.println("cos(2) = " + cosinus(2,8)); System.out.println("cos(1000) = funktioniert nicht (System hängt sich auf)" ); // cos(0,-1,1,2) funktionieren, bei allem darüber hängt sich das System auf. // Vergleich mit den Ergebnissen der in Java eingebauten Cosinus Methode // Cosinus Math.cos System.out.println("Vergl. mit Math.cos"); System.out.println("cos(0) = " + Math.cos(0)); System.out.println("cos(1) = " + Math.cos(1)); System.out.println("cos(-1) = " + Math.cos(-1)); System.out.println("cos(2) = " + Math.cos(2)); System.out.println("cos(1000) = " + Math.cos(1000)); } }Geändert von freizeit-psychologe (04.11.11 um 17:02 Uhr)
-
04.11.11 17:19 #2
Sry, hat sich gerade eben erledigt. Habe den Fehler behoben.
-
04.11.11 18:46 #3
Hey,
wenn du das Problem gelöst hast, wäre es schön, wenn du deine Lösung noch schreibst und das Thema anschließend als erledigt markierst. Danke
Gruß
FabioBitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]
Tutorials:
Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
JAnimationPanel - Animationen für Swing/AWT
SWTRatingBar (Bewertungs-Composite) selbst programmieren
____________________________________________________________________________
Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.
-
Ich habe genau das gleiche Problem. Ich hoffe mir kann da jemand helfen.
mfg
Evolox
-
@freizeitpsychologe: Es wäre wirklich nett, wenn du dich noch einmal meldest.
Ins Blaue hinein geraten: War das Radiant-System dein Problem? Mit %2Pi?
@Evolox:
Willkommen bei tutorials.de
Poste bitte einmal deinen aktuellen Code.Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
"Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?
-
Code java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
public class ProgrammCos { public static double EPSILON = 1E-8; static long factorial(int max) { long fakultaet = 1; for (int zahl=1; zahl<=max; zahl++) { fakultaet = fakultaet * zahl; } return fakultaet; } static float cos(float x) { if(x > 3f) { System.out.println("Infinity"); return 0.0f; }; double result = 0.0; int n = -1; double cos = 0.0; do { cos = Math.pow(-1,n+3) * Math.pow(x,2*n+2) / factorial(2*n+2); result += cos; n += 1; } while (Math.abs(cos) >= EPSILON); //Terminationsbedingung return (float) result; } public static void main(String[] args) { System.out.println("cos(0)=" + cos(0)); System.out.println("cos(1)=" + cos(1)); System.out.println("cos(-1)=" + cos(-1)); System.out.println("cos(1000)=" + cos(1000)); <= hier hängt es System.out.println("Math.cos(0)=" + Math.cos(0)); System.out.println("Math.cos(1)=" + Math.cos(1)); System.out.println("Math.cos(-1)=" + Math.cos(-1)); System.out.println("Math.cos(1000)=" + Math.cos(1000)); } }
also bis 3 kann der cosinus berechnet werden, aber bei allen zahlen die darüber hinaus gehen hängt sich das programm auf, darum habe ich auch die if bedingung dort eingebrachtGeändert von sheel (06.11.11 um 09:32 Uhr) Grund: Codetags
-
In Zukunft bitte die Codetags (siehe Signatur) verwenden...
den Effekt siehst du ja.
Und zum Fehler...
das Selbe.
Euch scheint allen nicht bewusst zu sein, dass die Taylor-Formeln
ihr x im Bogenmaß/Radiant/wie auch immer haben wollen.
360° sind also 6.28, also zwei mal PI.
90° wäre entsprechend PI/2 usw.
Um die Wertwiederholung mit einzubeziehen:
Statt
das:Code cpp:1 2 3 4
if(x > 3f) { System.out.println("Infinity"); return 0.0f; };
Code cpp:1 2 3
x = x % 6.28318531; if(x < 0.0) x = 6.28318531 - x;
Alle float durch double ersetzen ist übrigens in dem Fall kein Nachteil.
GrußNetiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
"Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?
-
Ahh alles klar, sehr gut jetzt wird mir einiges klarer. Danke. Aber irgendwie klappt es immer noch nicht. Das Programm bleibt immernoch bei Werten über 3 hängen und jetzt auch bei negativen Werten.
Ähnliche Themen
-
DB Reihe zusammenrechnen!
Von X-Cheats im Forum PHPAntworten: 2Letzter Beitrag: 19.07.09, 18:18 -
3 Bilder in einer Reihe, wie
Von maeg im Forum PHPAntworten: 13Letzter Beitrag: 10.06.08, 20:07 -
Stil wie James Taylor
Von tobee im Forum PhotoshopAntworten: 2Letzter Beitrag: 17.05.06, 15:19 -
Bilder pro reihe und Zeile
Von prims im Forum PHPAntworten: 3Letzter Beitrag: 15.07.05, 19:29 -
3 in reihe
Von DRXX im Forum PHPAntworten: 3Letzter Beitrag: 27.12.04, 19:05





Zitieren

Login





