C# Genauigkeit von double

DeepComputer

Banned
Registriert
Apr. 2020
Beiträge
266
Hallo,

wir haben eine Aufgabe bekommen Math.sin() in 360 grad auszugeben, aber es kommen nie gerade zahlen raus.
also zB
double a = Math.sin(360) ist nicht 0 sondern 0.999473943 usw.
Wisst ihr warum?
 
In der Regel rechnen solche Funktionen nicht in Altgrad, sondern Radiant. Probiere also mal double a = Math.sin(6,2831....)
 
  • Gefällt mir
Reaktionen: cvzone und foo_1337
Double (Precision) arbeitet mit 8 Byte (also 64 Bit) in der Nachkommastelle. Aufgrund der endlichen Zahl an Nachkommastellen muss irgendwo gerundet werden und irgendwann macht sich das bemerkbar.
 
cvzone schrieb:
Double (Precision) arbeitet mit 8 Byte (also 64 Bit) in der Nachkommastelle. Aufgrund der endlichen Zahl an Nachkommastellen muss irgendwo gerundet werden und irgendwann macht sich das bemerkbar.
Ja genau. Kannst du das bitte etwas erläutern wie das mit der Bitkonstellation aussieht?
 
Lustig, Dein Nickname ist "DeepComputer". Dann diese Anfängerfrage.
Computer können super mit Ganzzahlen bis zur maximalen Grösse.
Sie können auch gut mit Floating Point - bis zu der definierten Genauigkeit.
Aber die ist das Zünglein an der Waage, wenn es darum geht, den Step von reeller Zahl zu Ganzzahl zu machen.

Du bist schon fast zwei (2) Jahre hier im Forum (Ganzzahl), dann solltest Du wissen, dass wir Deine Hausaufgaben nicht für Dich machen sollen.
Den Job Dir zu erklären, warum es bei Floating-Point-Berechnungen immer wieder Abweichungen in der Genauigkeit gibt, hat Dein Lehrer.
 
  • Gefällt mir
Reaktionen: AwesomSTUFF
till69 schrieb:
Bogenmaß verwenden, denn:

Math.Cos(0) ergibt exakt 1 (auch als double)
genau das dürfen wir eben nicht.
// Beachten Sie außerdem dass das Ergebnis der Winkelfunktionen
// Explizit in Grad (0-360) angegeben werden soll, nicht in RAD (0-2*PI)
 
@Phrasendreher Wollte dir kurz widersprechen, aber seine Threads sind ja ausschliesslich Hausaufgaben :(

@DeepComputer Poste doch mal bitte die exakte aufgabe. Dann beschreib was du schon verstanden hast und was fuer dich problematisch ist. Wir koennen gern helfen die Antwortzen zu finden, aber vorkauen eher nicht :)
 
  • Gefällt mir
Reaktionen: Baal Netbeck und Bonanca
Phrasendreher schrieb:
wieder Abweichungen in der Genauigkeit gibt, hat Dein Lehrer.
uns erklärt und keiner hat es sich gemerkt. Und es ist nicht meine Hausübung sondern eine Frage des Interesses. Nach eine Psychoanalyse hab ich nicht gefragt lool
Ergänzung ()

Ich will verstehen, wie das falsche Runden zustande kommt. Das hat uns unserer Lehrer vorgerechnet, aber hat sich keiner gemerkt.
 
DeepComputer schrieb:
Ich will verstehen, wie das falsche Runden zustande kommt. Das hat uns unserer Lehrer vorgerechnet, aber hat sich keiner gemerkt.
Es wird nicht falsch gerundet. Die Funktion erwartet ein Bogenmaß und gibt ein Bogenmaß zurück. Das Umrechnen zum Gradmaß musst du separat machen.
 
  • Gefällt mir
Reaktionen: BAGZZlash
DeepComputer schrieb:
Ich will verstehen, wie das falsche Runden zustande kommt. Das hat uns unserer Lehrer vorgerechnet, aber hat sich keiner gemerkt.
Hab ich dir doch oben verlinkt. Ab Minute 4.30 wird genau das erklärt sowie in Farbe und Bunt gezeigt.
 
  • Gefällt mir
Reaktionen: Phrasendreher
zu dem was @G-Red bereits verlinkte kann ich sehr empfehlen den Artikel zu lesen: https://de.wikipedia.org/wiki/IEEE_754

und ruhig mal 2-3 uwandlungen von hand durchzufuehren. Die IEEE 754 kot in fast allen modernen Sprachen zur repraesentation von nicht-ganzzahligen Werten zum Einsatz. Wenn man die einmal verstanden und 2-3 tage damit verbracht hat, hat man irgendwie ein viel intuitiveres Verstaendniss dafuer, wie Zahlen in Computern funktionieren. Ich kann das Gefuehl nicht so recht beschreiben
 
DeepComputer schrieb:
Ich will verstehen, wie das falsche Runden zustande kommt.
Die Funktion rundet/rechnet nicht falsch, sondern du benutzt sie falsch bzw. mit dem falschen Eingabewert.
Deine 360 Grad für einen vollen Kreis müsstest du bei der Funktion als 2π angeben, damit das gewünschte Ergebnis bei rauskommt.
 
Nur geht es hier ja gar nicht um eine Rundung, wie schon gesagt wurde, sondern das 'falsche' Argument für die Berechnung.
 
An alle die auf das bogenmaß hingewiesen haben:
Ihr wisst aber schon, dass sin(360) im bogenmaß 0.9589... ergibt und damit ziemlich weit von dem Ergebnis weg ist, was der TE erhalten hat?
 
  • Gefällt mir
Reaktionen: madmax2010
Incanus schrieb:
wie schon gesagt wurde,
Nur weil etwas oft wiederholt wird, wird es nicht richtig.
Ergänzung ()

Incanus schrieb:
Von '0' ist es aber noch viel weiter weg ;).
Korrekt. Dann sind wir aber beim grundlegenden Problem nach der Frage, WAS von den Angaben des TEs eigtl falsch war.

Edit:
Oder eben wieder bei der Frage, woher die Ungenauigkeit 0.95... zu 0.99... entstand.
 
  • Gefällt mir
Reaktionen: AwesomSTUFF
also die 0.9778 zahl hab ich hier random eingegeben. Das Resultat war was ähnliches. Ich wollte nur wissen, warum es eben von 0 oder 1 abweicht.
 
Zurück
Oben