Kann C # genauere Daten speichern als doppelt?

8

double in C # ist nicht genau genug für meine Bedürfnisse. Ich schreibe ein Fraktalprogramm, und nachdem ich ein paar Male gezoomt habe, ist mir die Präzision ausgegangen.

Ich habe dort einen Datentyp, der präzisere Fließkomma-Informationen (d. h. mehr Nachkommastellen) enthalten kann als ein Double?

    
simonalexander2005 29.03.2011, 13:19
quelle

3 Antworten

16

Ja, decimal wurde genau dafür entwickelt.

Beachten Sie jedoch, dass der Bereich des Dezimaltyps kleiner als ein Doppel ist. Das Doppelte kann einen größeren Wert enthalten, aber es verliert dadurch an Genauigkeit. Oder, wie auf MSDN angegeben:

  

Das Dezimalschlüsselwort bezeichnet ein 128-Bit   Datentyp. Im Vergleich zu Gleitkomma   Typen, der Dezimaltyp hat eine größere   Präzision und eine kleinere Reichweite, die   macht es geeignet für finanzielle und   monetäre Berechnungen. Das ungefähre   Bereich und Genauigkeit für die Dezimalstelle   Typ wird in der folgenden Tabelle gezeigt.

Der Hauptunterschied zwischen decimal und double besteht darin, dass decimal Fixpunkt und double Gleitkomma . Das bedeutet, dass dezimal einen genauen Wert speichert, während double einen Wert darstellt, der durch einen Bruch repräsentiert wird, und weniger genau ist. A decimal hat 128 Bits, so dass der doppelte Speicherplatz benötigt wird. Berechnungen auf decimal sind ebenfalls langsamer (measure!).

Wenn Sie eine noch größere Genauigkeit benötigen, kann BigInteger von .NET 4 verwendet werden. (Sie müssen selbst mit Dezimalstellen umgehen). Hier sollten Sie beachten, dass BigInteger unveränderlich ist, so dass jede arithmetische Operation eine neue Instanz erzeugt - wenn Zahlen groß sind, kann dies die Performance beeinträchtigen.

Ich schlage vor, Sie schauen genau, wie genau Sie sein müssen. Vielleicht kann Ihr Algorithmus mit normalisierten Werten arbeiten, die kleiner sein können? Wenn Leistung ein Problem ist, wird einer der integrierten Gleitkommatypen wahrscheinlich schneller sein.

    
driis 29.03.2011, 13:19
quelle
3

Das .NET Framework 4 führt die System.Numerics.BigInteger-Struktur ein, die Zahlen mit einer beliebig großen Genauigkeit enthalten kann.

    
Dave Van den Eynde 29.03.2011 13:25
quelle
0

Sehen Sie sich BigInteger (.NET 4) an, wenn Sie noch mehr benötigen Genauigkeit als Decimal gibt Ihnen.

    
Jonas Elfström 29.03.2011 13:22
quelle

Tags und Links