.NET における数値

.NET には、さまざまな整数および浮動小数点プリミティブに加え、次が用意されています。

整数型

次の表のように、.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 に準拠していません。 詳細については、「言語への非依存性、および言語非依存コンポーネント」を参照してください。

BigInteger

System.Numerics.BigInteger 構造体は、理論的には値に上限や下限がない、サイズの大きい任意の整数を表す不変の型です。 BigInteger 型のメソッドは、他の整数型のメソッドとかなり類似しています。

浮動小数点型

.NET には、次の浮動小数点型が含まれています。

種類 サイズ (バイト単位) おおよその範囲 プリミティブ メモ
System.Half 2 ±65504 No .NET 5 で導入
System.Single 4 ±3.4 x 1038 はい
System.Double 8 ±1.7 × 10308 はい
System.Decimal 16 ±7.9228 x 1028 No

HalfSingleDouble 型で非数と無限を表す特殊な値がサポートされています。 たとえば、Double 型では、Double.NaNDouble.NegativeInfinityDouble.PositiveInfinity 値が提供されます。 これらの特殊な値のテストには Double.IsNaNDouble.IsInfinityDouble.IsPositiveInfinityDouble.IsNegativeInfinity メソッドを使用します。

各浮動小数点型で標準的な算術演算子セットがサポートされています。 System.Math クラスでは、広範囲の数学関数セットのためのメソッドが提供されます。 .NET Core 2.0 以降には、Single 型の引数を受け取るメソッドを提供する System.MathF クラスが含まれています。

System.BitConverter クラスを使用し、DoubleSingleHalf 値の個々のビットを操作することもできます。 System.Decimal 構造体には、10 進値の個々のビットを操作するための独自のメソッド (Decimal.GetBitsDecimal(Int32[]))、および追加の数学演算を実行するための独自のメソッド セットがあります。

DoubleSingleHalf 型は、不正確な値 (2 つの星の間の距離など) での使用と、高い精度や小さな丸め誤差の検出が必要ではないアプリケーションでの使用が想定されています。 より高い精度が必要とされ、丸め誤差を最小限に抑えるべきケースでは、System.Decimal 型を使用します。

注意

Decimal 型の場合、丸めの必要がなくなります。 丸めに起因するエラーが最小限に抑えられます。

複合

System.Numerics.Complex 構造体は、複素数、つまり、実数部と虚数部からなる数を表します。 算術演算子、比較演算子、等価演算子、明示的な変換の演算子、暗黙的な変換の演算子からなる標準セットがサポートされ、さらに数学、代数、三角関数のメソッドもサポートされます。

SIMD が有効な型

System.Numerics 名前空間には、.NET SIMD 対応型のセットが含まれています。 SIMD (Single Instruction Multiple Data) 演算はハードウェア レベルで並列化できます。 それにより、数学、科学、グラフィックス アプリで一般的な、ベクター化された計算のスループットが向上します。

.NET SIMD 対応の型には次のような型があります。

  • それぞれ 2、3、4 つの Single 値を表す Vector2 型、Vector3 型、Vector4 型。

  • 2 つのマトリックス型。3 x 2 行列を表す Matrix3x2 と 4 x 4 行列を表す Matrix4x4

  • 3 次元空間の平面を表す Plane 型。

  • 3 次元物理回転をエンコードするために使用されるベクトルを表す Quaternion 型。

  • 指定の数値型のベクトルを表し、SIMD サポートが活かされる広範囲の演算子セットを提供する Vector<T> 型。 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 と 4.6 以降のバージョンの .NET Framework に含まれています。 64 ビット プロセッサを対象にするとき、SIMD サポートが追加されます。

詳細については、SIMD アクセラレータの数値型の使用に関するページを参照してください。

関連項目