Condividi tramite


Numeri in .NET

.NET offre un intervallo di primitive numeriche integer e a virgola mobile, nonché:

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
System.Double 8 ±1.7 × 10308
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.

Vedere anche