Zum neuen Informatik-Forum >>
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

sinus in java

 
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    Informatikerboard.de Foren-Übersicht -> Java/JSP
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
sommer87



Anmeldungsdatum: 14.02.2005
Beiträge: 36
Wohnort: Hessen (nähe FFM)

BeitragVerfasst am: 01. März 2005 18:36    Titel: sinus in java Antworten mit Zitat

Hi,

ich wollte gerade ein kleines Programm schreiben, mit dem ich ein paar Dinge ausrechnen kann.

Jetzt habe ich versucht den sinus zum Winkel a zu berechnen.
Wenn ich a dann einen Wert gebe zeigt mir das Programm auch ganz viele lustige Zahlen an, nur leider nie den genauen Wert der richtig wäre.
(sin(90)=0,8939966636005579 ?!? )

Mein code sieht so aus:

Code:
public class Test234 {

  public static void main(String[] args) {
 
        int a;
        a=90;

        double g;
        g = Math.sin( a );

        System.out.print("Sin(90)=" + g);
}

}


Was mach ich da falsch und wie komm ich auf richtige Werte?
Hab schon ein paar Seiten gelesen, und auch den code direkt kopiert, aber es kommt keine exakte Lösung bei raus...

_________________
mfg
sommer87
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Thomas
Administrator


Anmeldungsdatum: 13.02.2005
Beiträge: 208

BeitragVerfasst am: 01. März 2005 20:47    Titel: Antworten mit Zitat

Hi,

was meinst du mit "exakt"? Sind dir die 20. Nachkommastelle wichtig, oder ist das erwartete Ergebnis vollkommen falsch?

Kann es sein, dass hier mit Bogenmaß statt Grad gerechnet wird?

Gruß,
Thomas
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
sommer87



Anmeldungsdatum: 14.02.2005
Beiträge: 36
Wohnort: Hessen (nähe FFM)

BeitragVerfasst am: 01. März 2005 21:29    Titel: Antworten mit Zitat

Thomas hat Folgendes geschrieben:
...
Kann es sein, dass hier mit Bogenmaß statt Grad gerechnet wird?

Gruß,
Thomas


args, ja, das ist es...
Hab schon zwischen alt und neugrad gewechselt, aber mit bogenmaß müsste es hinkommen.
kann man das umstellen, dass die werte in Grad, also mit einem 360° Vollwinkel angegeben werden?
oder muss ich dann erst erst eine umrechnung im programm schreiben, damit Grad angegeben werden können, aber die maschine dann mit bogenmaß rechnet?

Danke schonmla für deine Hilfe smile

\\EDIT: Bogenmaß stimmt, aber die nachkommastellen reichen für die umrechnung von grad in bogenmaß nicht aus.

für den sinus kommt ein korektes (geringe fehlertoleranz) ergebnis raus.
für cosinus sind die werte dann aber falsch.

Bsp:

Der schiefe Wurf:
Wenn ich einen Körper mit 5 m/s senkrecht nach oben werfe (90° zur horizontale) hat der körper keine bewegung in horizontale richtung.

Wenn ich jetzt das tool berechnen lass kommt aber eine Geschwindigkeit von 2,70... m/s heraus.

Die 31 Nachkommastellen vom Windows TR würden das Ergebnis korrekt darstellen.
Die 15 Nachkommastellen von double reichen da also nicht aus unglücklich

Kann ich das irgendwie exakter hinbekommen?
Kann ich da statt double was anderes angeben, um 20+.Nachkommastellen zu bekommen?

_________________
mfg
sommer87
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
sommer87



Anmeldungsdatum: 14.02.2005
Beiträge: 36
Wohnort: Hessen (nähe FFM)

BeitragVerfasst am: 04. März 2005 14:47    Titel: Antworten mit Zitat

hi,

weiß keiner mehr eine Einheit, die mehr Nachkomma stellen als double hat?
Oder hat vll einer eine Idee, wie ich das problem lösen könnte?

Ich wollte die eingabe doch in gradmaß lassen...

_________________
mfg
sommer87
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
kurellajunior
Administrator


Anmeldungsdatum: 14.02.2005
Beiträge: 214
Wohnort: Berlin-Pankow

BeitragVerfasst am: 04. März 2005 16:37    Titel: Antworten mit Zitat

Hi Sommer,

Bist Du sicher, dass eine inline umwandlung immer noch schlecht gerundete Werte produziert?

Code:
double lWinkel = 90.0;
System.out.println(Math.sin(Math.PI*lWinkel/180));

funzt wunderbar grübelnd und gibt 1.0 aus

Jan

_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
sommer87



Anmeldungsdatum: 14.02.2005
Beiträge: 36
Wohnort: Hessen (nähe FFM)

BeitragVerfasst am: 04. März 2005 18:46    Titel: Antworten mit Zitat

hi,

ja für sinus reichts.
aber bei cosinus kommt bei cos(90) nicht 0 raus!
das war mein problem....


\\EDIT:



kommt bei mir raus.

_________________
mfg
sommer87
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
kurellajunior
Administrator


Anmeldungsdatum: 14.02.2005
Beiträge: 214
Wohnort: Berlin-Pankow

BeitragVerfasst am: 04. März 2005 23:23    Titel: Antworten mit Zitat

Problem erkannt. Und nicht lösbar. Bei jeder Computerzahl hast Du eine begrenzte Genauigkeit und bei der Cosinusroutine ist die grenze ereicht.

Workarounds: Genauigkeit von erzwingen

Schöner: Eine Eigene Klasse bauen, die Spezialwerte abfängt und korrekt zurückgibt. Ist aber mehr Aufwand...

_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
sommer87



Anmeldungsdatum: 14.02.2005
Beiträge: 36
Wohnort: Hessen (nähe FFM)

BeitragVerfasst am: 04. März 2005 23:29    Titel: Antworten mit Zitat

hm, schade dass es keine einfache lösung dafür gibt unglücklich

von deinem vorschlag lass ich vorerst mal die finger weg.
nach 2 stunden java im infounterricht hab ich noch nicht wirklich so viel ahnung Augenzwinkern

aber danke für deine bemühungen smile

_________________
mfg
sommer87
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
kurellajunior
Administrator


Anmeldungsdatum: 14.02.2005
Beiträge: 214
Wohnort: Berlin-Pankow

BeitragVerfasst am: 05. März 2005 10:13    Titel: Antworten mit Zitat

Code:
class Degree{
  static public double sin(double pDegree){
    if (Math.mod(pDegree, 180)==0){
      return 0;
    }
    else if (Math.mod(pDegree, 360)==90){
      return 1;
    }
    else if (Math.mod(pDegree, 360)==-90){
      return -1;
    }
    else {
      return Math.sin(Math.PI*pDegree/180);
    }
  }
}

Die restlichen Fälle (1/2) kannst Du ja selber machen.

Jan

_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    Informatikerboard.de Foren-Übersicht -> Java/JSP Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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