.NET における数値
.NET には、さまざまな整数および浮動小数点プリミティブに加え、次が用意されています。
- System.Half。半精度浮動小数点数を表します。
- System.Decimal。10 進数浮動小数点数を表します。
- 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 に準拠していません。 詳細については、「言語への非依存性、および言語非依存コンポーネント」を参照してください。
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 |
Half、Single、Double 型で非数と無限を表す特殊な値がサポートされています。 たとえば、Double 型では、Double.NaN、Double.NegativeInfinity、Double.PositiveInfinity 値が提供されます。 これらの特殊な値のテストには Double.IsNaN、Double.IsInfinity、Double.IsPositiveInfinity、Double.IsNegativeInfinity メソッドを使用します。
各浮動小数点型で標準的な算術演算子セットがサポートされています。 System.Math クラスでは、広範囲の数学関数セットのためのメソッドが提供されます。 .NET Core 2.0 以降には、Single 型の引数を受け取るメソッドを提供する System.MathF クラスが含まれています。
System.BitConverter クラスを使用し、Double、Single、Half 値の個々のビットを操作することもできます。 System.Decimal 構造体には、10 進値の個々のビットを操作するための独自のメソッド (Decimal.GetBits と Decimal(Int32[]))、および追加の数学演算を実行するための独自のメソッド セットがあります。
Double、Single、Half 型は、不正確な値 (2 つの星の間の距離など) での使用と、高い精度や小さな丸め誤差の検出が必要ではないアプリケーションでの使用が想定されています。 より高い精度が必要とされ、丸め誤差を最小限に抑えるべきケースでは、System.Decimal 型を使用します。
注意
Decimal 型の場合、丸めの必要がなくなります。 丸めに起因するエラーが最小限に抑えられます。
複合
System.Numerics.Complex 構造体は、複素数、つまり、実数部と虚数部からなる数を表します。 算術演算子、比較演算子、等価演算子、明示的な変換の演算子、暗黙的な変換の演算子からなる標準セットがサポートされ、さらに数学、代数、三角関数のメソッドもサポートされます。
SIMD が有効な型
System.Numerics 名前空間には、.NET SIMD 対応型のセットが含まれています。 SIMD (Single Instruction Multiple Data) 演算はハードウェア レベルで並列化できます。 それにより、数学、科学、グラフィックス アプリで一般的な、ベクター化された計算のスループットが向上します。
.NET SIMD 対応の型には次のような型があります。
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 アクセラレータの数値型の使用に関するページを参照してください。
関連項目
.NET