![]() |
---|
Hallo, Ich habe mir nun den Unterschied zwischen einem Decimal Datentyp und eine Double Datentyp angeschaut. Ich bin leider sehr verwirrt daraus hervorgegangen. Eine Zahl 1,36 als Double liegt im Computer offenbar als 1,359999... irgendwas vor. Einerseits brauchen decimals mehr Speicher, aber ist es nicht viel speicherintensiver 1,359999 zu speichern als 1,36? Andererseits heißt der Double Datentyp wird für wissenschaftliche Bereiche verwendet, aber gerade in diesem Bereich wird doch viel gerechnet; stauen sich da nicht diese kleinen Unterschiede zu großen Differenzen an? Vielleicht könntet ihr mir diese Paradoxitäten erklären. Gruß Für alle, die mir helfen möchten (automatisch von OnlineMathe generiert): "Ich möchte die Lösung in Zusammenarbeit mit anderen erstellen." |
![]() |
Die einzige Paradoxie die ich sehe ist, dass du reelle Zahlen mit endlicher Dezimaldarstellung als etwas besonders schützenswertes hinsichtlich Rechnung mit Floating-Point-Zahlen ansiehst. Dass eine Zahl wie im Dezimalsystem mit endlichen vielen Stellen auch nicht genau repräsentiert werden kann, stört dich hingegen nicht? Reelle Zahlen mit endlicher Dezimalbruchdarstellung lassen sich durch rationale Zahlen darstellen. Wenn du partout GENAU mit diesen Zahlen rechnen willst (zumindest die vier Grundrechenarten), dann rechne mit diesen Zahlen und gewissen Bibliotheken (z.B. gmplib kennt den Datentyp "rationale Zahl") statt mit normalen Floating-Point-Zahlen. Es gibt also Alternativen für dieses "Problem". |
![]() |
Es geht nicht darum was ich verwenden will. Sondern darum zu verstehen, was ich verwende. Wie ergibt sich denn eine Doublezahl im Computer? Die weniger Speicher verbraucht als ihr Decimal Gegenstück und trotz mehr signifikanter stellen weniger genau ist. Das ist bei 1/3 ja auch der Fall. Die Zahl wird als Double doch nicht genauer sein als als Decimal. Das wäre ja noch schlimmer, wenn es sich von Zahl zu Zahl anders verhält. |
![]() |
Es geht nicht darum was ich verwenden will. Sondern darum zu verstehen, was ich verwende. Wie ergibt sich denn eine Doublezahl im Computer? Die weniger Speicher verbraucht als ihr Decimal Gegenstück und trotz mehr signifikanter stellen weniger genau ist. Das ist bei 1/3 ja auch der Fall. Die Zahl wird als Double doch nicht genauer sein als als Decimal. Das wäre ja noch schlimmer, wenn es sich von Zahl zu Zahl anders verhält. |
![]() |
Sie sind nur weniger genau bei bestimmten endlichen Dezimalzahlen. Bei anderen reellen Zahlen sind sie genauer als Dezimalzahlrepräsentationen mit dem gleichen Speicherplatzbedarf: Z.B. kann die reelle Zahl im Double-Format EXAKT gespeichert werden. Kann man das mit einem Dezimalformat, welches nur 8 Byte beansprucht auch? > Wie ergibt sich denn eine Doublezahl im Computer? Lies es einfach nach: de.wikipedia.org/wiki/IEEE_754 de.wikipedia.org/wiki/Doppelte_Genauigkeit wird in Double repräsentiert durch die Dezimalzahl . > Die Zahl wird als Double doch nicht genauer sein als als Decimal. Ich weiß nicht, was dein "Decimal" für einen Speicherplatzbedarf hat. Wenn es auch nur 8 Byte wären (und da muss auch der Exponent mit rein), schafft es gewiss keine genauere Repräsentation von . > Eine Zahl 1,36 als Double liegt im Computer offenbar als 1,359999... irgendwas vor. Um genau zu sein: Tatsächlich ist es . |
![]() |
Ok, danke. Der Decimal Datentyp ist 16 Byte groß und ist keine Gleitkommazahl. Damit kommt man von E-28 bis E28. |
![]() |
Ja, hab das inzwischen gelesen: Dieses Decimal scheint ein Microsoft-spezifisches Format zu sein, was sonst kaum Verbreitung gefunden hat. Inhaltlich ist es das, was ich am 15.9., 19:15 angedeutet habe: Diese Zahlen werden als 96Bit-Integerzahl gespeichert und zusätzlich ein Dezimalexponent , also . Kann man machen, wenn's einem Spaß macht - Anwendungen sehe ich allenfalls in der Finanzwirtschaft, wo man vielleicht peinlich genau Wert legt auf bestimmte Dezimalrundungen, d.h. nicht weniger genaue, aber im Einzelfall "andere" Binärdarstellungsrundungen ablehnt. |