Udostępnij za pośrednictwem


Wartości liczbowe na platformie .NET

Platforma .NET udostępnia szereg prymitywnych typów liczbowych całkowitych i zmiennoprzecinkowych, a także:

Typy liczb całkowitych

Platforma .NET obsługuje zarówno podpisane, jak i niepodpisane 8-bitowe, 16-bitowe, 32-bitowe, 64-bitowe i 128-bitowe typy całkowite, które są wymienione w poniższych tabelach.

Podpisane typy liczb całkowitych

Typ Rozmiar (w bajtach) Wartość minimalna Wartość maksymalna
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 (w procesie 32-bitowym) 4 -2,147,483,648 2,147,483,647
System.IntPtr (w procesie 64-bitowym) 8 -9,223,372,036,854,775,808 9,223,372,036,854,775,807

Niepodpisane typy liczb całkowitych

Typ Rozmiar (w bajtach) Wartość minimalna Wartość maksymalna
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 (w procesie 32-bitowym) 4 0 4,294,967,295
System.UIntPtr (w procesie 64-bitowym) 8 0 18,446,744,073,709,551,615

Każdy typ liczb całkowitych obsługuje zestaw standardowych operatorów arytmetycznych. Klasa System.Math udostępnia metody szerszego zestawu funkcji matematycznych.

Można również pracować z poszczególnymi bitami w wartości całkowitej, za pomocą klasy System.BitConverter.

Uwaga / Notatka

Niepodpisane typy liczb całkowitych nie są zgodne ze specyfikacją CLS. Aby uzyskać więcej informacji, zobacz Niezależność języka i składniki niezależne od języka.

BigInteger

Struktura System.Numerics.BigInteger jest niezmiennym typem reprezentującym dowolnie dużą liczbę całkowitą, której wartość teoretycznie nie ma granic górnych ani dolnych. Metody typu BigInteger ściśle odpowiadają tym z innych typów całkowitych.

Typy zmiennoprzecinkowe

Platforma .NET obejmuje następujące typy zmiennoprzecinkowe:

Typ Rozmiar (w bajtach) Przybliżony zakres Prymitywny? Notatki
System.Half 2 ±65504 Nie. Wprowadzone w platformie .NET 5
System.Single 4 ±3,4 x 1038 Tak
System.Double 8 ±1.7 × 10308 Tak
System.Decimal 16 ±7,9228 x 1028 Nie.

Typy Half, Singlei Double obsługują specjalne wartości, które reprezentują nienumer i nieskończoność. Na przykład Double typ zawiera następujące wartości: Double.NaN, Double.NegativeInfinityi Double.PositiveInfinity. Używasz metod Double.IsNaN, Double.IsInfinity, Double.IsPositiveInfinity i Double.IsNegativeInfinity do testowania pod kątem tych specjalnych wartości.

Każdy typ zmiennoprzecinkowy obsługuje zestaw standardowych operatorów arytmetycznych. Klasa System.Math udostępnia metody szerszego zestawu funkcji matematycznych. Platforma .NET Core 2.0 lub nowsza zawiera klasę System.MathF , która udostępnia metody akceptujące argumenty Single typu.

Możesz również pracować z poszczególnymi bitami w Double, Single i Half przy użyciu klasy System.BitConverter. Struktura System.Decimal ma własne metody Decimal.GetBits i Decimal(Int32[]), do pracy z poszczególnymi bitami wartości dziesiętnej, a także z własnym zestawem metod wykonywania dodatkowych operacji matematycznych.

Typy Double, Singlei Half mają być używane dla wartości, które z ich natury są nieprecyzyjne (na przykład odległość między dwiema gwiazdami) i dla aplikacji, w których nie jest wymagany wysoki stopień dokładności i małego błędu zaokrąglania. System.Decimal Użyj typu w przypadkach, w których wymagana jest większa precyzja, a błędy zaokrąglania powinny być zminimalizowane.

Uwaga / Notatka

Typ Decimal nie eliminuje potrzeby zaokrąglania. Zamiast tego minimalizuje błędy wynikające z zaokrąglania.

Kompleks

Struktura System.Numerics.Complex reprezentuje liczbę zespolona, czyli liczbę z częścią liczbową rzeczywistą i częścią wyimaginowaną. Obsługuje standardowy zestaw arytmetycznych, porównawczych, równości, jawnych i niejawnych operatorów konwersji, a także metod matematycznych, algebraicznych i trygonometrycznych.

Typy obsługujące technikę SIMD

System.Numerics Przestrzeń nazw zawiera zestaw typów platformy .NET z obsługą SIMD. Operacje SIMD (pojedynczej instrukcji-wiele danych) można zrównoleglić na poziomie sprzętu. Zwiększa to przepływność wektoryzowanych obliczeń, które są wspólne w aplikacjach matematycznych, naukowych i graficznych.

Typy z obsługą SIMD platformy .NET obejmują następujące typy:

  • Typy Vector2, Vector3i Vector4 reprezentujące wektory z wartościami 2, 3 i 4 Single .

  • Dwa typy macierzy, Matrix3x2, które reprezentują macierz 3x2, i Matrix4x4, które reprezentują macierz 4x4.

  • Plane Typ, który reprezentuje płaszczyznę w trójwymiarowej przestrzeni.

  • Quaternion Typ, który reprezentuje wektor używany do kodowania trójwymiarowych rotacji fizycznych.

  • Typ Vector<T> , który reprezentuje wektor określonego typu liczbowego i zapewnia szeroki zestaw operatorów, które korzystają z obsługi SIMD. Liczba wystąpień Vector<T> jest stała, ale jej wartość Vector<T>.Count zależy od procesora CPU maszyny, na której jest wykonywany kod.

    Uwaga / Notatka

    Typ Vector<T> jest dołączany do programów .NET Core i .NET 5+, ale nie .NET Framework. Jeśli używasz .NET Framework, zainstaluj pakiet NuGet System.Numerics.Vectors, aby uzyskać dostęp do tego typu.

Typy z obsługą SIMD są implementowane w taki sposób, że mogą być używane ze sprzętem bez obsługi SIMD lub kompilatorami JIT. Aby korzystać z instrukcji SIMD, aplikacje 64-bitowe muszą być uruchamiane przez środowisko uruchomieniowe korzystające z kompilatora RyuJIT, który jest zawarty w programie .NET Core i w wersjach .NET Framework 4.6 i nowszych. Dodaje obsługę SIMD przy celowaniu w procesory 64-bitowe.

Aby uzyskać więcej informacji, zobacz Używanie przyspieszonych typów liczbowych SIMD.

Zobacz także