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?
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 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.
Das .NET Framework 4 führt die System.Numerics.BigInteger-Struktur ein, die Zahlen mit einer beliebig großen Genauigkeit enthalten kann.
Sehen Sie sich BigInteger (.NET 4) an, wenn Sie noch mehr benötigen Genauigkeit als Decimal
gibt Ihnen.