Freigeben über


Numerische Ausdrücke in .NET

.NET bietet ein Spektrum numerischer ganzzahliger und Gleitkomma-Datentypen sowie:

Ganzzahltypen

.NET unterstützt signierte und nicht signierte 8-Bit-, 16-Bit-, 32-Bit-, 64-Bit- und 128-Bit-Ganzzahltypen, 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 (im 32-Bit-Prozess) 4 -2,147,483,648 2\.147.483.647
System.IntPtr (im 64-Bit-Prozess) 8 -9,223,372,036,854,775,808 9,223,372,036,854,775,807

Nicht signierte ganzzahlige Typen

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 (im 32-Bit-Prozess) 4 0 4,294,967,295
System.UIntPtr (im 64-Bit-Prozess) 8 0 18,446,744,073,709,551,615

Jeder ganzzahlige Typ unterstützt eine Reihe von standardmäßigen arithmetischen Operatoren. Die System.Math Klasse stellt Methoden für eine breitere Gruppe mathematischer Funktionen bereit.

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

Hinweis

Die nicht signierten ganzzahligen Typen 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, deren Wert theoretisch keine oberen oder unteren Grenzen aufweist. Die Methoden des BigInteger-Typs entsprechen denen der anderen integralen Typen.

Gleitkommatypen

.NET enthält die folgenden Gleitkommatypen:

Typ Größe (in Bytes) Ungefährer Bereich Primitiv? Hinweise
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 Half, Singleund Double Typen unterstützen spezielle Werte, die keine Zahl und Unendlichkeit darstellen. Der Typ stellt z. B. Double die folgenden Werte bereit: Double.NaN, Double.NegativeInfinity und Double.PositiveInfinity. Sie verwenden die Methoden Double.IsNaN, Double.IsInfinity, Double.IsPositiveInfinity und Double.IsNegativeInfinity, um diese speziellen Werte zu testen.

Jeder Gleitkommatyp unterstützt eine Reihe von standardmäßigen arithmetischen Operatoren. Die System.Math Klasse stellt Methoden für eine breitere Gruppe mathematischer Funktionen bereit. .NET Core 2.0 und höher enthält die System.MathF Klasse, die Methoden bereitstellt, die Argumente des Single Typs akzeptieren.

Sie können auch mit den einzelnen Bits in Double, Singleund 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 Bits eines Dezimalwerts zu arbeiten, sowie über eigene Methoden zum Ausführen zusätzlicher mathematischer Vorgänge.

Die Typen Double, Single und Half sind dazu gedacht, für Werte verwendet zu werden, die von Natur aus ungenau sind (z. B. der Abstand zwischen zwei Sternen) und für Anwendungen, bei denen ein hoher Genauigkeitsgrad und ein geringer Rundungsfehler nicht erforderlich sind. Verwenden Sie den System.Decimal Typ für Fälle, in denen eine höhere Genauigkeit erforderlich ist, und Rundenfehler sollten minimiert werden.

Hinweis

Der Decimal Typ beseitigt nicht die Notwendigkeit der Rundung. Vielmehr werden Fehler, die durch Rundungen entstehen, minimiert.

Komplex

Die System.Numerics.Complex Struktur stellt eine komplexe Zahl dar, d. h. eine Zahl mit einem reellen Zahlenteil und einen imaginären Zahlenteil. Es unterstützt einen Standardsatz von arithmetischen, Vergleichs-, Gleichheits-, expliziten und impliziten Konvertierungsoperatoren sowie mathematischen, algebraischen und trigonometrischen Methoden.

SIMD-fähige Typen

Der System.Numerics Namespace enthält eine Reihe von .NET SIMD-fähigen Typen. SIMD-Vorgänge (Single Instruction Multiple Data) können auf Hardwareebene parallelisiert werden. Dies erhöht den Durchsatz der vektorisierten Berechnungen, die in mathematischen, wissenschaftlichen und Grafik-Apps üblich sind.

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

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

  • Zwei Matrixtypen, Matrix3x2die eine 3x2-Matrix darstellen, und Matrix4x4, die eine 4x4-Matrix darstellt.

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

  • Der Quaternion Typ, der einen Vektor darstellt, der zum Codieren dreidimensionaler physischer Drehungen verwendet wird.

  • Der Vector<T> Typ, der einen Vektor eines angegebenen numerischen Typs darstellt und einen breiten Satz von Operatoren bereitstellt, die von SIMD-Unterstützung profitieren. Die Anzahl einer Vector<T> Instanz ist fest, aber ihr Wert Vector<T>.Count hängt von der CPU des Computers ab, auf der code ausgeführt wird.

    Hinweis

    Der Vector<T> Typ ist in .NET Core und .NET 5+ enthalten, aber nicht .NET Framework. Wenn Sie .NET Framework verwenden, installieren Sie das NuGet-Paket "System.Numerics.Vectors ", um Zugriff auf diesen Typ zu erhalten.

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

Weitere Informationen finden Sie unter Verwenden von SIMD-beschleunigten numerischen Typen.

Siehe auch