Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
sommer87
Anmeldungsdatum: 14.02.2005 Beiträge: 36 Wohnort: Hessen (nähe FFM)
|
Verfasst am: 01. März 2005 18:36 Titel: sinus in java |
|
|
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 |
|
|
|
Thomas Administrator
Anmeldungsdatum: 13.02.2005 Beiträge: 208
|
Verfasst am: 01. März 2005 20:47 Titel: |
|
|
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 |
|
|
sommer87
Anmeldungsdatum: 14.02.2005 Beiträge: 36 Wohnort: Hessen (nähe FFM)
|
Verfasst am: 01. März 2005 21:29 Titel: |
|
|
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
\\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
Kann ich das irgendwie exakter hinbekommen?
Kann ich da statt double was anderes angeben, um 20+.Nachkommastellen zu bekommen? _________________ mfg
sommer87 |
|
Nach oben |
|
|
sommer87
Anmeldungsdatum: 14.02.2005 Beiträge: 36 Wohnort: Hessen (nähe FFM)
|
Verfasst am: 04. März 2005 14:47 Titel: |
|
|
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 |
|
|
kurellajunior Administrator
Anmeldungsdatum: 14.02.2005 Beiträge: 214 Wohnort: Berlin-Pankow
|
Verfasst am: 04. März 2005 16:37 Titel: |
|
|
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 und gibt 1.0 aus
Jan _________________
|
|
Nach oben |
|
|
sommer87
Anmeldungsdatum: 14.02.2005 Beiträge: 36 Wohnort: Hessen (nähe FFM)
|
Verfasst am: 04. März 2005 18:46 Titel: |
|
|
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 |
|
|
kurellajunior Administrator
Anmeldungsdatum: 14.02.2005 Beiträge: 214 Wohnort: Berlin-Pankow
|
Verfasst am: 04. März 2005 23:23 Titel: |
|
|
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 |
|
|
sommer87
Anmeldungsdatum: 14.02.2005 Beiträge: 36 Wohnort: Hessen (nähe FFM)
|
Verfasst am: 04. März 2005 23:29 Titel: |
|
|
hm, schade dass es keine einfache lösung dafür gibt
von deinem vorschlag lass ich vorerst mal die finger weg.
nach 2 stunden java im infounterricht hab ich noch nicht wirklich so viel ahnung
aber danke für deine bemühungen _________________ mfg
sommer87 |
|
Nach oben |
|
|
kurellajunior Administrator
Anmeldungsdatum: 14.02.2005 Beiträge: 214 Wohnort: Berlin-Pankow
|
Verfasst am: 05. März 2005 10:13 Titel: |
|
|
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 |
|
|
|