訓練
.NET 中的數值
.NET 提供數值整數和浮點基本類型的範圍,以及:
- System.Half,代表半精確度浮點數。
- System.Decimal,表示十進位浮點數。
- System.Numerics.BigInteger,這是沒有理論上限或下限的整數類型。
- System.Numerics.Complex,表示複數。
- System.Numerics 命名空間中已啟用 SIMD 的一組類型。
.NET 同時支援帶正負號和不帶正負號的 8 位元、16 位元、32 位元、64 位元和 128 位元整數類型,如下表所列。
帶正負號的整數類型
類型 | 大小 (以位元組為單位) | 最小值 | 最大值 |
---|---|---|---|
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 (在 32 位元處理序中) | 4 | -2,147,483,648 | 2,147,483,647 |
System.IntPtr (在 64 位元處理序中) | 8 | -9,223,372,036,854,775,808 | 9,223,372,036,854,775,807 |
不帶正負號的整數類型
類型 | 大小 (以位元組為單位) | 最小值 | 最大值 |
---|---|---|---|
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 (在 32 位元處理序中) | 4 | 0 | 4,294,967,295 |
System.UIntPtr (在 64 位元處理序中) | 8 | 0 | 18,446,744,073,709,551,615 |
每個整數類型皆支援一組標準算術運算子。 System.Math 類別能提供適用於更廣泛數學函式的方法。
藉由使用 System.BitConverter 類別,您也可在整數值中使用個別位元。
注意
不帶正負號的整數類型並不符合 CLS 規範。 如需詳細資訊,請參閱語言獨立性以及與語言無關的元件。
System.Numerics.BigInteger 結構是不可變的類型,表示任意大的整數,其值在理論上沒有上限或下限。 BigInteger 類型的方法與其他整數類資料類型的方法極為相似。
.NET 包含下列浮點類型:
類型 | 大小 (以位元組為單位) | 大概範圍 | Primitive? | 備註 |
---|---|---|---|---|
System.Half | 2 | ±65504 | No | 在 .NET 5 中引進 |
System.Single | 4 | ±3.4 x 1038 | Yes | |
System.Double | 8 | ±1.7 × 10308 | Yes | |
System.Decimal | 16 | ±7.9228 x 1028 | No |
Half、Single 和 Double 類型皆支援代表非數字和無限大的特殊值。 例如,Double 類型能提供下列值:Double.NaN、Double.NegativeInfinity 及 Double.PositiveInfinity。 您會使用 Double.IsNaN、Double.IsInfinity、Double.IsPositiveInfinity 及 Double.IsNegativeInfinity 方法來測試這些特殊值。
每個浮點類型皆支援一組標準算術運算子。 System.Math 類別能提供適用於更廣泛數學函式的方法。 .NET Core 2.0 和更新版本包含 System.MathF 類別,該類別提供接受 Single 型別引數的方法。
藉由使用 System.BitConverter 類別,您也可使用 Double、Single 和 Half 中的個別位元。 System.Decimal 結構有它自己的方法,為 Decimal.GetBits 和 Decimal(Int32[]),用於使用十進位值的個別位元,而且還有一組自己的方法,用於執行一些額外的數學運算。
Double、Single 和 Half 類型主要供本質上並不精確的值使用 (例如兩個行星之間的距離),並且供不需較高有效位數和較小進位誤差的應用程式使用。 在需要較高精確度並將進位誤差降到最低的情況下,請使用 System.Decimal 類型。
注意
Decimal 類型並不會消除進位的需求。 它會將因進位而產生的錯誤降到最低。
System.Numerics.Complex 結構代表複數,也就是具有實部和虛部的數字。 它支援一組標準的算術、比較、等號比較、明確及隱含轉換的運算子,以及數學、代數和三角函數方法。
System.Numerics 命名空間包含一組 .NET 啟用 SIMD 的類型。 SIMD (單指令多資料) 作業可在硬體層級進行平行處理。 這能提升向量化運算 (常見於數學、科學及圖形應用程式中) 的輸送量。
.NET 啟用 SIMD 的類型包含下列項目:
Plane 類型,其代表立體空間中的平面。
Quaternion 類型,其代表用來編碼 3D 實體旋轉的向量。
Vector<T> 類型,其代表指定數值類型的向量,並能提供一組受益於 SIMD 支援的廣泛運算子。 Vector<T> 執行個體的計數是固定的,但其值 Vector<T>.Count 會相依於執行程式碼之電腦的 CPU。
注意
Vector<T> 型別隨附於 .NET Core 和 .NET 5+,但不包含 .NET Framework。 如果您使用 .NET Framework,請安裝 System.Numerics.Vectors NuGet 套件,以存取此類型。
啟用 SIMD 的類型的實作方式,使它們可以搭配未啟用 SIMD 的硬體或 JIT 編譯器使用。 若要運用 SIMD 指令,您的 64 位元應用程式必須由使用 RyuJIT 編譯器的執行階段執行,此編譯器已包含在 .NET Core 和 .NET Framework 4.6 及更新版本中。 它會在以 64 位元處理器為目標時加入 SIMD 支援。
如需詳細資訊,請參閱使用 SIMD 加速數數值型別。