Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Float / Double / Decimal

Moderationshinweis von gfoidl (19.02.2021 - 11:52:31):

Abgeteilt von Unterschied Prefix & Postfix

Crussy
myCSharp.de - Member



Dabei seit:
Beiträge: 4

Themenstarter:

beantworten | zitieren | melden

Ahh okay, jetzt habe ich es verstanden. Danke!!
Vielleicht noch eine kleine Frage zu den Variablen..

Float / Double / Decimal
Sind ja alle für Zahlen mit Kommerstelle

Dabei ist float am ungenauesten und decimal am genauesten, da float weniger bit hat, als decimal(?).
Ich habe auch gelesen man benutzt so gut wie nur double, außer man hat wenig speicher dann halt float oder es muss sehr genau sein, wie Berechnungen mit Geld.. dann benutzt man mal Decimal.

Aber was genau heißt denn, dass das eine genauer ist, als das andere?
Passieren dort schon ab hunderstel fehler oder wie kann ich mir das mit dem un- und genauen Variablen vorstellen?
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 7510
Herkunft: Waidring

beantworten | zitieren | melden

Hallo Crussy,

float und double sind Gleitkommazahlen, die nach IEEE 754 gespeichert werden.
float wird mit 32-bit gespeichert, während double mit 64-bit gespeichert wird, daher auch das "double" für "doppelte Genauigkeit". Da geht es v.a. darum wie die Zahlen und Ergebnisse gerundet werden. Somit können bei float 7-8 Dezimalstellen ohne Genauigkeitsverlust gespeichert werden, bei double sind es schon 15-16.

Der [FAQ] Double und Float: Fehler beim Vergleich und Rundungsfehler geht auf ein paar Eigenheiten dieser Gleitkommazahlen ein.

Wie erwähnt wird bei Operationen mit Gleitkommazahlen das "wahre Ergebnis" gerundet und somit ergeben sich zwangsläufig Rundungsfehler. Für viele Algorithmen spielen diese keine wesentliche Rolle, z.B. in der Thermodynamik ist es egal ob die Temperatur 273,1500001 K od. 273,1500002 K ist. Einen weiteren Ausflug in die Stabilität (Numerik) erspare ich dir hier ;-)

Stell dir nun aber vor es geht um Bank-Geschäfte und bei jeder Transaktion würde ein Rundungsfehler passieren. Nach unzähligen solcher Transaktionen und einer bestimmten Zeit könnten die Rundungsfehler so groß werden, dass die Bilanzen nicht mehr stimmen und das spielt eine wesentliche Rolle. Daher ist sind die o.g. Gleitkommazahlen ungeeignet und deshalb wurde der Datentyp decimal erfunden. Dieser besitzt keine Rundungsfehler und ist somit für Finanz-Mathematik die geieignete Wahl. Allerdings ist das Rechnen mit decimal aufgrund der Genauigkeitsanforderungen und des Wert-Bereichs nicht so performant wie mit den Gleitkomma-Typen double / float und tw. auch nicht anwendbar (da der Wert-Bereich über-/unterschritten wird).

Zusammengefasst:
Finanzmathematik -> decimal
Sonst -> double, außer Anforderungen an die Genauigkeit sind nicht sehr hoch dass float.

Was jedoch "nicht sehr hoch" bedeutet ist von Aufgabe zu Aufgabe verschieden, aber siehe oben bei den Dezimalstellen.

mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
private Nachricht | Beiträge des Benutzers
Crussy
myCSharp.de - Member



Dabei seit:
Beiträge: 4

Themenstarter:

beantworten | zitieren | melden

Alles klar, vielen Dank für die Hilfe!
Falls mir in den nächsten Wochen noch weitere Fragen auftreten, was bestimmt der Fall sein wird, werde ich mich hier nochmal im Forum melden.

Vielen Dank & Dir ein schönes Wochenende !
Crussy
private Nachricht | Beiträge des Benutzers