Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Michi Gast
|
Verfasst am: 11. Nov 2005 22:31 Titel: Problem mit Sinus und manchen Rechnungen |
|
|
Hallo
Ich hab einen Taschenrechner mit Java programmiert
Der Taschenrechner gibt mir aber beim Sinus völlig unsinnige Werte aus ich hab schon in Grad umgewandelt aber es hat nichts gebracht Außerdem gibt er mir bei manchen Rechnungen nicht ganz exakte werte sondern ziemlich lange Zahle aus z.B.: 1.2*3=3,5999999999999999999999999999996 kann mir hier irgendwer helfen
danke |
|
Nach oben |
|
|
|
Leviathan
Anmeldungsdatum: 11.11.2005 Beiträge: 1
|
Verfasst am: 11. Nov 2005 23:21 Titel: |
|
|
hi!
also...........
math.sinus() erwartet einen double und gibt auch einen double aus(kannst du in der dokumenntation nachlesen bei sun.com)
double ist mit 64 bit festgelegt wobei ein paar stellen die zahl sind und der rest ist für die genauigkeit. trotzdem kann ein double nur eine ca. 14-stellige genauigkeit darstellen und deswegen wird dein wert den du berechnest nicht genau!
es wäre von vorteil wenn du zumindest die standard-ergebnisse von sinus und cosinus also 0°, 30°,45°,60° und 90° extra angibst. ansonsten kommen ja für sinus und kosinus unendlich lange werte raus.
pass auch auf wenn du 1/2 berechnest wenn jetzt...
Code: |
int a=1;
int b=2;
int ergebnis;
ergebnis=a/b
System.out.println(ergebnis);
|
so wird nur 0 angegeben weil int keine gleitpunktzahlen darstellen kann!
ich hoffe ich konnte dir helfen, wenn nicht kannst du unter http://www.gailer-net.de alles nochmal nachlesen.
Ist ein sehr gutes tutorial.
MFG Leviathan _________________ System.out.println("Hello World!!"); |
|
Nach oben |
|
|
Brandti Gast
|
Verfasst am: 13. Nov 2005 13:44 Titel: |
|
|
Also zumindest bei der Rechnung mit dem 1.2 ist das denke ich ein anderes Problem.
Es ist nämlich schwer, auch einfache Zahlen, wie 1.2, im Binärsystem zu schreiben.
Viele Zahlen, die in unserem Dezimalsystem ganz einfach sind, sind im Binärsystem periodische Bruchzahlen, also unendlich lang. Daher können sie nur "ungefähr" angegeben werden, wodurch solche Rechenfehler entstehen.
Eine Möglichkeit diese zu umgehen, wäre einfach das Ergebnis zu runden, bevor man es ausgibt, was natürlich unschön ist. Eine andere Variante wäre, alles erstmal mit Zehnerpotenzen zu multiplizieren, sodass es keine Kommazahlen mehr sind, oder, was ich für das beste halte, alles in Bruchzahlen umzuwandeln, also in diesem Fall 12/10 * 3/1 = 6/5 * 3/1 = 18/5 = 3.6. Damit hätte man auch gleich die Möglichkeit den Benutzer Bruchzahlen eingeben zu lassen. |
|
Nach oben |
|
|
Brandti Gast
|
Verfasst am: 13. Nov 2005 18:37 Titel: |
|
|
Übrigens kann man der Methode Math.sin(double a) sehr wohl einen Integer-Wert übergeben, da dieser intern umgewandelt wird.
Außerdem wäre ein kleines Beispiel ganz nett, bei dem die unsinnigen Ergebnisse beim Sinus rauskommen!
MfG Brandti |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum nicht posten Du kannst Dateien in diesem Forum nicht herunterladen
|
|