Numeriska värden i .NET

.NET tillhandahåller ett antal numeriska heltal och flyttalsprimärer samt:

Heltalstyper

.NET stöder både signerade och osignerade 8-bitars, 16-bitars, 32-bitars, 64-bitars och 128-bitars heltalstyper, som visas i följande tabeller.

Signerade heltalstyper

Typ Storlek (i byte) Minimum value Maximum value
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 (i 32-bitarsprocess) 4 -2,147,483,648 2,147,483,647
System.IntPtr (i 64-bitarsprocess) 8 -9,223,372,036,854,775,808 9,223,372,036,854,775,807

Osignerade heltalstyper

Typ Storlek (i byte) Minimum value Maximum value
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 (i 32-bitarsprocess) 4 0 4,294,967,295
System.UIntPtr (i 64-bitarsprocess) 8 0 18,446,744,073,709,551,615

Varje heltalstyp stöder en uppsättning standardaritmetiska operatorer. Klassen System.Math innehåller metoder för en bredare uppsättning matematiska funktioner.

Du kan också arbeta med enskilda bitar i ett heltalsvärde med hjälp System.BitConverter av klassen .

Kommentar

De osignerade heltalstyperna är inte CLS-kompatibla. Mer information finns i Språkoberoende och språkoberoende komponenter.

BigInteger

Strukturen System.Numerics.BigInteger är en oföränderlig typ som representerar ett godtyckligt stort heltal vars värde i teorin inte har några övre eller nedre gränser. Metoderna av typen BigInteger är nära parallella med metoderna för de andra integraltyperna.

Flyttalstyper

.NET innehåller följande flyttalstyper:

Typ Storlek (i byte) Ungefärligt intervall Primitiva? Kommentar
System.Half 2 ±65504 Nej Introducerades i .NET 5
System.Single 4 ±3,4 x 1038 Ja
System.Double 8 ±1,7 × 10308 Ja
System.Decimal 16 ±7.9228 x 1028 Nej

Typerna Half, Singleoch Double har stöd för specialvärden som representerar not-a-number och infinity. Typen innehåller till exempel Double följande värden: Double.NaN, Double.NegativeInfinityoch Double.PositiveInfinity. Du använder Double.IsNaNmetoderna , Double.IsInfinity, Double.IsPositiveInfinityoch Double.IsNegativeInfinity för att testa dessa specialvärden.

Varje flyttalstyp stöder en uppsättning standardaritmetiska operatorer. Klassen System.Math innehåller metoder för en bredare uppsättning matematiska funktioner. .NET Core 2.0 och senare innehåller System.MathF klassen, som innehåller metoder som accepterar argument av typen Single .

Du kan också arbeta med de enskilda bitarna i Double, Singleoch Half värden med hjälp System.BitConverter av klassen . Strukturen System.Decimal har egna metoder, Decimal.GetBits och Decimal(Int32[]), för att arbeta med ett decimalvärdes enskilda bitar, samt en egen uppsättning metoder för att utföra ytterligare matematiska åtgärder.

Typerna Double, Singleoch Half är avsedda att användas för värden som till sin natur är oprecisa (till exempel avståndet mellan två stjärnor) och för program där det inte krävs någon hög precision och ett litet avrundningsfel. Använd typen System.Decimal för fall där större precision krävs och avrundningsfel bör minimeras.

Kommentar

Typen Decimal eliminerar inte behovet av avrundning. I stället minimeras felen på grund av avrundning.

Complex

Strukturen System.Numerics.Complex representerar ett komplext tal, dvs. ett tal med en verklig taldel och en imaginär taldel. Den stöder en standarduppsättning aritmetiska, jämförelse-, likhets-, explicita och implicita konverteringsoperatorer, samt matematiska, algebraiska och trigonometriska metoder.

SIMD-aktiverade typer

Namnområdet System.Numerics innehåller en uppsättning .NET SIMD-aktiverade typer. SIMD-åtgärder (single instruction multiple data) kan parallelliseras på maskinvarunivå. Det ökar dataflödet för vektoriserade beräkningar, som är vanliga i matematiska, vetenskapliga och grafikappar.

De .NET SIMD-aktiverade typerna innehåller följande:

  • Typerna Vector2, Vector3och Vector4 , som representerar vektorer med värdena 2, 3 och 4 Single .

  • Två matristyper, Matrix3x2, som representerar en 3x2-matris och Matrix4x4, som representerar en 4x4-matris.

  • Typen Plane , som representerar ett plan i tredimensionellt utrymme.

  • Typen Quaternion , som representerar en vektor som används för att koda tredimensionella fysiska rotationer.

  • Typen Vector<T> , som representerar en vektor av en angiven numerisk typ och ger en bred uppsättning operatorer som har stöd för SIMD. Antalet instanser Vector<T> är fast, men dess värde Vector<T>.Count beror på datorns PROCESSOR, på vilken kod som körs.

    Kommentar

    Typen Vector<T> ingår i .NET Core och .NET 5+, men inte .NET Framework. Om du använder .NET Framework installerar du NuGet-paketet System.Numerics.Vectors för att få åtkomst till den här typen.

DE SIMD-aktiverade typerna implementeras på ett sådant sätt att de kan användas med icke-SIMD-aktiverad maskinvara eller JIT-kompilatorer. För att kunna dra nytta av SIMD-instruktioner måste dina 64-bitarsappar köras av den körning som använder RyuJIT-kompilatorn, som ingår i .NET Core och i .NET Framework 4.6 och senare versioner. Det lägger till SIMD-stöd när du riktar in dig på 64-bitars processorer.

Mer information finns i Använda SIMD-accelererade numeriska typer.

Se även