Wartości numeryczne na platformie .NET
Platforma .NET udostępnia szereg liczb całkowitych i zmiennoprzecinkowych elementów pierwotnych, a także:
- System.Half, który reprezentuje liczbę zmiennoprzecinkową o pół precyzji.
- System.Decimal, który reprezentuje liczbę zmiennoprzecinkową dziesiętną.
- System.Numerics.BigInteger, który jest typem całkowitym bez teoretycznej górnej lub dolnej granicy.
- System.Numerics.Complex, który reprezentuje liczby zespolone.
- Zestaw typów z obsługą System.Numerics simD w przestrzeni nazw.
Typy całkowite
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 | 100 | -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) | 100 | -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 | 100 | 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) | 100 | 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 System.BitConverter przy użyciu klasy .
Uwaga
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 BigInteger typu ściśle równoległe te z innych typów całkowitych.
Typy zmiennoprzecinkowe
Platforma .NET obejmuje następujące typy zmiennoprzecinkowe:
Typ | Rozmiar (w bajtach) | Przybliżony zakres | Pierwotnych? | Uwagi |
---|---|---|---|---|
System.Half | 2 | ±65504 | Nie. | Wprowadzone na platformie .NET 5 |
System.Single | 100 | ±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. Metody , , Double.IsInfinityDouble.IsPositiveInfinityi służą Double.IsNegativeInfinity do testowania Double.IsNaNpod kątem tych specjalnych wartości.
Każdy typ zmiennoprzecinkowa 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 Doublewartościach , Singlei Half przy użyciu System.BitConverter klasy . 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
Typ Decimal nie eliminuje potrzeby zaokrąglania. Zamiast tego minimalizuje błędy z powodu zaokrąglania.
Complex
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 z obsługą simD platformy .NET. Operacje SIMD (pojedynczej instrukcji wiele danych) można zrównoleglizować 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 elementy:
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
Typ Vector<T> jest dołączany do programów .NET Core i .NET 5+, ale nie .NET Framework. Jeśli używasz programu .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 z nieobsługiowanym sprzętem lub kompilatorami JIT z obsługą 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 podczas określania wartości docelowych dla procesorów 64-bitowych.
Aby uzyskać więcej informacji, zobacz Używanie przyspieszonych typów liczbowych SIMD.