PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C#: Wann float, double, decimal?


Elemental
2004-07-25, 10:54:40
Wann nimmt man eigentlich float, wann double und wann decimal?
Ich nehm bisher immer double!

Gruss
Bernd

Trap
2004-07-25, 12:01:39
double hat von allen Datentypen den größten Wertebereich, aber für ganzzahlige Anwendungen wie z.B. Zähler sind int sinnvoller und auch schneller.

Elemental
2004-07-25, 14:49:24
Ja klar, aber gerade die 3 von mir genannten Typen sind doch eigentlich fast identisch, oder?.
double ist afaik nur grösser als float, aber was für eine Daseinsberechtigung decimal hat, ist mir bisher noch unklar.

Einfachkrank
2004-07-25, 15:09:36
Also, eigentlich nicht. Bei reinen Integer Variablen wird in Bits die Zahl selbst und ein eventuelles Vorzeichen gespeichert. Bei Gleitkommazahlen muss in der Variable, die Zahl, die Nachkommastellen und der dazugehörige Exponent gespeichert werden. So weit ich weiß spielt also der Speicherplatz dabei ne Rolle

pajofego
2004-07-25, 15:37:41
Original geschrieben von Elemental
Ja klar, aber gerade die 3 von mir genannten Typen sind doch eigentlich fast identisch, oder?.
double ist afaik nur grösser als float, aber was für eine Daseinsberechtigung decimal hat, ist mir bisher noch unklar.

Laut MS MSDN hier (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/csref/html/vcrefthedecimaltype.asp) sind Decimal am besten für finanzmathematische Anwendungen geeignet. Was auf Grund seiner 28-29 Stellen an Genauigkeiten auch Sinn macht. Z.B. für Länder mit hoher Inflationsrate und vielen Nullern auf ihren Scheinchen.

beta3
2004-07-25, 16:06:22
float (System.Single) und double (System.Double) (32bit bzw. 64bit precision floating point value = gleitkomma wert mit 32 bzw 64 bittiger genauigkeit)

wenn man diese typen benutzt, wird die zahl nicht genau abgespeichert, sonder leicht gerundet
dadurch sind sie sehr gut für wissenschaftliche berechnungen
z.b. wird float x = 5;
als 4,9999 oder 5,00001 gespeichert (so in etwa)

durch diese rundungen eignet sich float überhaupt nicht für finanzrechnungen

decimal speichert hingegen alles sehr genau ab und es wird nichts gerundet, also perfekt für komplexe finanzrechnungen

nebenbei verbraucht decimal den größten speicher, deswegen wird mit decimal nicht so schnell gerechnet, wie mit floats, aber für den endanwender dürfte es nicht bemerkbar sein
nur mit tools kann man dies feststellen

Trap
2004-07-25, 16:11:03
Huh? 5 ist in double und float genau 5. Probleme macht z.B. 0.1 das wird gerundet.

Bei decimal ist mir nicht genau genug beschrieben was es macht, ich würd es deshalb nicht benutzen.

HellHorse
2004-07-25, 16:33:38
Was sind floating point Zahlen:
http://3dcenter.org/artikel/fp_format/

beta3
2004-07-25, 22:09:04
Original geschrieben von Trap
Huh? 5 ist in double und float genau 5. Probleme macht z.B. 0.1 das wird gerundet.

float wird intern gerundet, hab das mal in einem artikel von einem der architekten der CLR gelesen

zeckensack
2004-07-25, 22:14:03
Original geschrieben von beta3
float wird intern gerundet, hab das mal in einem artikel von einem der architekten der CLR gelesen 5.0 kann auf jeden Fall exakt dargestellt werden. Egal was du gelesen hast.

aths
2004-07-27, 17:39:56
Original geschrieben von beta3
als 4,9999 oder 5,00001 gespeichert (so in etwa)Die 5 kann selbst mit FP16 ganz exakt dargestellt werden.

Hucke
2004-07-29, 09:23:22
@beta3
Wenn Du die Zahlen in binärer Schreibweise darstellen kannst, dann sind sie genau. Wenn das nicht geht (weil irrationale Zahl) dann wird gerundet. Bei der 0.1 ist das der Fall (wie ja schon geschrieben wurde) aber die 5 kann man prima binär darstellen, nämlich als 101.