.NET 中的数字Numerics in .NET

本文内容

.NET 提供一系列数值整型和浮点型基元、System.Numerics.BigInteger(没有理论上限或下限的整型类型)、System.Numerics.Complex(表示复杂数字)和 System.Numerics 命名空间中一组启用了 SIMD 的类型。

整数类型Integer types

.NET 支持带有符号和无符号的 8 位、16 位、32 位和 64 位整数类型,如下表所示:

类型有符号/无符号大小(以字节为单位)最小值最大值
System.Byte无符号10255
System.Int16有符号2-32,76832,767
System.Int32有符号4-2,147,483,6482,147,483,647
System.Int64有符号8-9,223,372,036,854,775,8089,223,372,036,854,775,807
System.SByte有符号1-128127
System.UInt16无符号2065,535
System.UInt32无符号404,294,967,295
System.UInt64无符号8018,446,744,073,709,551,615

每个整数类型都支持一组标准算术运算符。System.Math 类为更广泛的数学函数集提供方法。

还可以使用 System.BitConverter 类对整数值中的单个位进行运算。

备注

无符号整数类型不符合 CLS。有关详细信息,请参阅 Language Independence and Language-Independent Components

BigIntegerBigInteger

System.Numerics.BigInteger 结构是不可变类型,表示其值没有理论上限或下限的任意大型整数。BigInteger 类型的方法几乎与其他整数类型的方法一致。

浮点类型Floating-point types

.NET 包括三个基元浮点类型,如下表所列:

类型大小(以字节为单位)大致范围精度
System.Single4±1.5 x 10−45 至 ±3.4 x 1038大约 6-9 位数字
System.Double8±5.0 × 10−324 到 ±1.7 × 10308大约 15-17 位数字
System.Decimal16±1.0 x 10-28 至 ±7.9228 x 102828-29 位

SingleDouble 类型都支持表示非数字和无穷大的特殊值。例如,Double 类型提供以下值:Double.NaNDouble.NegativeInfinityDouble.PositiveInfinity可以使用 Double.IsNaNDouble.IsInfinityDouble.IsPositiveInfinityDouble.IsNegativeInfinity 方法来测试这些特殊值。

每个浮点类型都支持一组标准的算术运算符。System.Math 类为更广泛的数学函数集提供方法。.NET Core 2.0 及更高版本包含 System.MathF 类,该类提供接受 Single 类型的参数的方法。

还可以使用 System.BitConverter 类对 DoubleSingle 值中的单个位进行运算。System.Decimal 结构具有自己处理十进制值单个位的方法(Decimal.GetBitsDecimal.Decimal(Int32[]))以及一套执行其他数学运算的方法。

DoubleSingle 类型旨在用于本质上不精确的值(例如,两颗行星之间的距离)和无需高度精确和舍入误差小的应用程序。在需要较高准确度和尽量减小舍入误差的情况下,应使用 System.Decimal 类型。

备注

Decimal 类型不会消除对舍入的要求。相反,它最大限度地减少了因舍入而导致的错误。

ComplexComplex

System.Numerics.Complex 结构表示复数,即带实数部分和虚数部分的数字。此类型支持一套标准的算术、比较、相等、显式和隐式转换运算符,以及数学、代数和三角方法。

启用了 SIMD 的类型SIMD-enabled types

System.Numerics 命名空间包含一组启用了 .NET SIMD 的类型。SIMD (Single Instruction Multiple Data) 操作可以在硬件级别并行化。这可以增加向量化计算的吞吐量,这在数学、科学和图形应用中很常见。

启用了 .NET SIMD 的类型如下:

  • Vector2Vector3Vector4 类型,用于表示具有 2、3 和 4 Single 值的向量。

  • 两个矩阵类型:Matrix3x2(表示 3x2 矩阵)和 Matrix4x4(表示 4x4 矩阵)。

  • Plane 类型,表示三维空间中的一个平面。

  • Quaternion 类型,表示一个用于对三维物理旋转进行编码的向量。

  • Vector 类型,表示指定数字类型的向量,并提供受益于 SIMD 支持的一组广泛的运算符。Vector 实例的计数是固定的,但其值 Vector.Count 取决于执行代码的计算机的 CPU。

备注

Vector 类型未包含在 .NET Framework 中。必须安装 System.Numerics.Vectors NuGet 包才能访问此类型。


启用了 SIMD 的类型以这样一种方式实现:即它们可以与未启用 SIMD 的硬件或 JIT 编译器一起使用。要利用 SIMD 指令,你的 64 位应用必须由使用 RyuJIT 编译器的运行时运行,该编译器包含在 .NET Core 和 .NET Framework 4.6 及更高版本中。它针对 64 位处理器增加了 SIMD 支持。

请参阅See also