Numerische Ausdrücke in .NET

.NET bietet einen Bereich von numerischen Integer- und Gleitkommaprimitiven sowie:

Ganzzahltypen

.NET unterstützt sowohl 8-Bit-, 16-Bit-, 32-Bit-, 64-Bit- und 128-Bit-Ganzzahltypen mit und auch ohne Vorzeichen, die in den folgenden Tabellen aufgeführt sind.

Ganzzahlige Typen mit Vorzeichen

Typ Größe (in Bytes) Minimalwert Maximalwert
System.Int16 2 -32,768 32,767
System.Int32 4 -2,147,483,648 2,147,483,647
System.Int64 8 -9,223,372,036,854,775,808 9,223,372,036,854,775,807
System.Int128 16 −170,141,183,460,469,231,731,687,303,715,884,105,728 170,141,183,460,469,231,731,687,303,715,884,105,727
System.SByte 1 -128 127
System.IntPtr (in einem 32-Bit-Prozess) 4 -2,147,483,648 2,147,483,647
System.IntPtr (in einem 64-Bit-Prozess) 8 -9,223,372,036,854,775,808 9,223,372,036,854,775,807

Ganzzahltypen ohne Vorzeichen

Typ Größe (in Bytes) Minimalwert Maximalwert
System.Byte 1 0 255
System.UInt16 2 0 65,535
System.UInt32 4 0 4,294,967,295
System.UInt64 8 0 18,446,744,073,709,551,615
System.UInt128 16 0 340,282,366,920,938,463,463,374,607,431,768,211,455
System.UIntPtr (in einem 32-Bit-Prozess) 4 0 4,294,967,295
System.UIntPtr (in einem 64-Bit-Prozess) 8 0 18,446,744,073,709,551,615

Jeder Ganzzahltyp unterstützt eine Reihe von arithmetischen Standardoperatoren. Die Klasse System.Math stellt Methoden für mehrere mathematische Funktionen bereit.

Sie können auch mit den einzelnen Bit in einem ganzzahligen Wert arbeiten, indem Sie die System.BitConverter-Klasse verwenden.

Hinweis

Die Ganzzahltypen ohne Vorzeichen sind nicht CLS-kompatibel. Weitere Informationen finden Sie unter Sprachunabhängigkeit und sprachunabhängige Komponenten.

BigInteger

Die System.Numerics.BigInteger-Struktur ist ein unveränderlicher Typ, der eine beliebig große ganze Zahl darstellt, dessen Wert theoretisch keine Ober- und Untergrenze hat. Die Methoden des BigInteger-Typs ähneln im Wesentlichen denen der anderen ganzzahligen Typen.

Gleitkommatypen

.NET enthält die folgenden Gleitkommatypen:

Typ Größe (in Bytes) Ungefährer Bereich Primitiv? Notizen
System.Half 2 ±65504 Nein Eingeführt in .NET 5.
System.Single 4 ±3.4 x 1038 Ja
System.Double 8 ±1.7 × 10308 Ja
System.Decimal 16 ±7.9228 x 1028 Nein

Die Typen Half, Single und Double unterstützen spezielle Werte, die „not-a-number“ und „infinity“ darstellen. Der Typ Double liefert beispielsweise die folgenden Werte: Double.NaN, Double.NegativeInfinity und Double.PositiveInfinity. Mit den Methoden Double.IsNaN, Double.IsInfinity, Double.IsPositiveInfinity und Double.IsNegativeInfinity können Sie Tests für diese speziellen Werte ausführen.

Jeder Gleitkommatyp unterstützt eine Reihe von arithmetischen Standardoperatoren. Die Klasse System.Math stellt Methoden für mehrere mathematische Funktionen bereit. .NET Core 2.0 und höher enthält die Klasse System.MathF, die Methoden bereitstellt, die Argumente vom Typ Single akzeptieren.

Sie können auch mit den einzelnen Bit in Double-, Single- und Half-Werten arbeiten, indem Sie die System.BitConverter-Klasse verwenden. Die System.Decimal-Struktur verfügt über eigene Methoden, Decimal.GetBits und Decimal(Int32[]), um mit den einzelnen Bit eines Dezimalwerts zu arbeiten, und sie verfügt über einen eigenen Satz an Methoden für die Durchführung einiger zusätzlicher mathematischer Operationen.

Die Typen Double, Single und Half sind dazu gedacht, für Werte verwendet zu werden, die per se unpräzise sind (wie der Abstand zwischen zwei Sternen), und für Anwendungen, in denen kein hoher Genauigkeitsgrad erforderlich ist und geringe Rundungsfehler auftreten dürfen. Verwenden Sie den System.Decimal-Typ in Fällen, in denen eine höhere Genauigkeit erforderlich ist und Rundungsfehler minimiert werden sollen.

Hinweis

Der Typ Decimal ersetzt nicht die Notwendigkeit der Rundung. Stattdessen reduziert er Fehler, die beim Runden auftreten.

Komplex

Die System.Numerics.Complex-Struktur steht für eine komplexe Zahl, d.h., für eine Zahl mit einem reellen und einem imaginären Teil. Sie unterstützt einen Standardsatz an Operatoren (arithmetisch, Vergleich, Gleichheit, explizite Konvertierung und implizite Konvertierung) sowie mathematische, algebraische und trigonometrische Methoden.

SIMD-fähige Typen

Der System.Numerics-Namespace umfasst einen Satz von SIMD-fähigen .NET-Typen. SIMD-Vorgänge (Single Instruction Multiple Data) lassen sich auf Hardwareebene parallelisieren. Das erhöht den Durchsatz der vektorisierten Berechnungen, die in mathematischen, wissenschaftlichen und grafischen Apps üblich sind.

Die SIMD-fähigen .NET-Typen umfassen Folgendes:

  • Die Typen Vector2, Vector3 und Vector4, die Vektoren mit 2, 3 und 4 Single-Werten darstellen.

  • Die zwei Matrixtypen Matrix3x2 und Matrix4x4. Der erste Typ stellt eine 3x2-Matrix und der zweite eine 4x4-Matrix dar.

  • Den Plane-Typ, der eine Ebene im dreidimensionalen Raum darstellt.

  • Den Quaternion-Typ, der einen Vektor darstellt, der zum Codieren von dreidimensionalen physischen Drehungen verwendet wird.

  • Den Vector<T>-Typ, der einen Vektor eines bestimmten numerischen Typs darstellt und mehrere Operatoren bereitstellt, die von der SIMD-Unterstützung profitieren. Die Anzahl von Vector<T>-Instanzen ist fest, aber ihr Wert Vector<T>.Count hängt von der CPU des Computers ab, auf dem der Code ausgeführt wird.

    Hinweis

    Der Vector<T>-Typ ist in .NET Core sowie .NET 5 und höher, jedoch nicht im .NET Framework enthalten. Wenn Sie das .NET Framework verwenden, müssen Sie das NuGet-Paket System.Numerics.Vectors installieren, um Zugriff auf diesen Typ zu erhalten.

Die SIMD-fähigen Typen sind so implementiert, dass sie mit nicht-SIMD-fähiger Hardware oder JIT-Compilern verwendet werden können. Damit Sie die SIMD-Anweisungen nutzen können, müssen Ihre 64-Bit-Apps von der Runtime ausgeführt werden, die den RyuJIT-Compiler verwendet, der in .NET Core und in .NET Framework 4.6 und höher enthalten ist. Sie fügt SIMD-Unterstützung hinzu, wenn 64-Bit-Prozessoren verwendet werden.

Weitere Informationen finden Sie unter Verwenden von mit SIMD beschleunigter numerischer Typen.

Siehe auch