Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
.NET offre un intervallo di primitive numeriche integer e a virgola mobile, nonché:
- System.Half, che rappresenta un numero a virgola mobile a metà precisione.
- System.Decimal, che rappresenta un numero a virgola mobile decimale.
- System.Numerics.BigInteger, che è un tipo integrale senza limite superiore o inferiore teorico.
- System.Numerics.Complex, che rappresenta numeri complessi.
- Un insieme di tipi compatibili con SIMD nello spazio dei nomi System.Numerics.
Tipi integer
.NET supporta tipi di interi con segno e senza segno a 8 bit, 16 bit, 32 bit, 64 bit e 128 bit, elencati nelle tabelle seguenti.
Tipi integer con segno
| TIPO | Dimensioni (in byte) | Valore minimo | Valore massimo |
|---|---|---|---|
| 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 processo a 32-bit) | 4 | -2,147,483,648 | 2,147,483,647 |
| System.IntPtr (nel processo a 64-bit) | 8 | -9,223,372,036,854,775,808 | 9,223,372,036,854,775,807 |
Tipi Integer senza segno
| TIPO | Dimensioni (in byte) | Valore minimo | Valore massimo |
|---|---|---|---|
| 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 processo a 32-bit) | 4 | 0 | 4,294,967,295 |
| System.UIntPtr (nel processo a 64-bit) | 8 | 0 | 18,446,744,073,709,551,615 |
Ogni tipo integer supporta un set di operatori aritmetici standard. La System.Math classe fornisce metodi per un set più ampio di funzioni matematiche.
È anche possibile usare i singoli bit in un valore intero usando la System.BitConverter classe .
Annotazioni
I tipi integer senza segno non sono conformi a CLS. Per altre informazioni, vedere Indipendenza della lingua e componenti indipendenti dal linguaggio.
BigInteger
La System.Numerics.BigInteger struttura è un tipo non modificabile che rappresenta un intero arbitrariamente grande il cui valore in teoria non ha limiti superiori o inferiori. I metodi del BigInteger tipo sono strettamente paralleli a quelli degli altri tipi integrali.
Tipi a virgola mobile
.NET include i tipi a virgola mobile seguenti:
| TIPO | Dimensioni (in byte) | Intervallo approssimativo | Primitivo? | Note |
|---|---|---|---|---|
| System.Half | 2 | ±65504 | NO | Introdotto in .NET 5 |
| System.Single | 4 | ±3.4 x 1038 | Sì | |
| System.Double | 8 | ±1.7 × 10308 | Sì | |
| System.Decimal | 16 | ±7.9228 x 1028 | NO |
I Halftipi , Singlee Double supportano valori speciali che rappresentano valori non numerici e infinito. Ad esempio, il Double tipo fornisce i valori seguenti: Double.NaN, Double.NegativeInfinitye Double.PositiveInfinity. Per testare questi valori speciali si usano i Double.IsNaNmetodi , Double.IsInfinityDouble.IsPositiveInfinity, e Double.IsNegativeInfinity .
Ogni tipo a virgola mobile supporta un insieme standard di operatori aritmetici. La System.Math classe fornisce metodi per un set più ampio di funzioni matematiche. .NET Core 2.0 e versioni successive include la System.MathF classe , che fornisce metodi che accettano argomenti del Single tipo.
È anche possibile lavorare con i singoli bit nei valori di Double, Single e Half utilizzando la classe System.BitConverter. La System.Decimal struttura ha metodi specifici Decimal.GetBits e Decimal(Int32[]), per lavorare con i singoli bit di un valore decimale, nonché il proprio set di metodi per eseguire alcune operazioni matematiche aggiuntive.
I Double, Single e Half sono progettati per essere usati per i valori che, per loro natura, sono imprecisi (ad esempio, la distanza tra due stelle) e per le applicazioni in cui non è necessario un elevato grado di precisione e un piccolo errore di arrotondamento. Usare il System.Decimal tipo per i casi in cui è necessaria una maggiore precisione e gli errori di arrotondamento devono essere ridotti al minimo.
Annotazioni
Il Decimal tipo non elimina la necessità di arrotondare. Invece, riduce al minimo gli errori dovuti all'arrotondamento.
Complesso
La System.Numerics.Complex struttura rappresenta un numero complesso, ovvero un numero con una parte numerica reale e una parte numerica immaginaria. Supporta un set standard di operatori di conversione aritmetici, di confronto, di uguaglianza, espliciti e impliciti, nonché di metodi matematici, algebrici e trigonometrici.
Tipi abilitati per SIMD
Lo System.Numerics spazio dei nomi include un set di tipi .NET abilitati per SIMD. Le operazioni SIMD (Single Instruction Multiple Data) possono essere parallelizzate a livello di hardware. Ciò aumenta la velocità effettiva dei calcoli vettorializzati, comuni nelle app matematiche, scientifiche e grafiche.
I tipi abilitati per SIMD .NET includono quanto segue:
Tipi Vector2, Vector3e Vector4 che rappresentano vettori con valori 2, 3 e 4 Single .
Due tipi di matrice, Matrix3x2, che rappresenta una matrice 3x2 e Matrix4x4, che rappresenta una matrice 4x4.
Tipo Plane , che rappresenta un piano nello spazio tridimensionale.
Tipo Quaternion , che rappresenta un vettore utilizzato per codificare rotazioni fisiche tridimensionali.
Tipo Vector<T> , che rappresenta un vettore di un tipo numerico specificato e fornisce un ampio set di operatori che traggono vantaggio dal supporto SIMD. Il conteggio di un'istanza Vector<T> è fisso, ma il relativo valore Vector<T>.Count dipende dalla CPU del computer, da cui viene eseguito il codice.
Annotazioni
Il Vector<T> tipo è incluso in .NET Core e .NET 5+, ma non in .NET Framework. Se stai utilizzando .NET Framework, installa il pacchetto NuGet System.Numerics.Vectors per accedere a questo tipo.
I tipi abilitati per SIMD vengono implementati in modo che possano essere usati con hardware non abilitato per SIMD o compilatori JIT. Per sfruttare le istruzioni SIMD, le app a 64 bit devono essere eseguite dal runtime che usa il compilatore RyuJIT, incluso in .NET Core e in .NET Framework 4.6 e versioni successive. Aggiunge il supporto SIMD quando è destinato a processori a 64 bit.
Per altre informazioni, vedere Usare tipi numerici con accelerazione SIMD.