.NET 中的数字Numerics in .NET
本文内容
.NET 提供一系列数值整型和浮点型基元、System.Numerics.BigInteger(没有理论上限或下限的整型类型)、System.Numerics.Complex(表示复杂数字)和 System.Numerics 命名空间中一组启用了 SIMD 的类型。
整数类型Integer types
.NET 支持带有符号和无符号的 8 位、16 位、32 位和 64 位整数类型,如下表所示:
类型 | 有符号/无符号 | 大小(以字节为单位) | 最小值 | 最大值 |
---|---|---|---|---|
System.Byte | 无符号 | 1 | 0 | 255 |
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.SByte | 有符号 | 1 | -128 | 127 |
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.Math 类为更广泛的数学函数集提供方法。
还可以使用 System.BitConverter 类对整数值中的单个位进行运算。
备注
无符号整数类型不符合 CLS。有关详细信息,请参阅 Language Independence and Language-Independent Components。
BigIntegerBigInteger
System.Numerics.BigInteger 结构是不可变类型,表示其值没有理论上限或下限的任意大型整数。BigInteger 类型的方法几乎与其他整数类型的方法一致。
浮点类型Floating-point types
.NET 包括三个基元浮点类型,如下表所列:
类型 | 大小(以字节为单位) | 大致范围 | 精度 |
---|---|---|---|
System.Single | 4 | ±1.5 x 10−45 至 ±3.4 x 1038 | 大约 6-9 位数字 |
System.Double | 8 | ±5.0 × 10−324 到 ±1.7 × 10308 | 大约 15-17 位数字 |
System.Decimal | 16 | ±1.0 x 10-28 至 ±7.9228 x 1028 | 28-29 位 |
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 值中的单个位进行运算。System.Decimal 结构具有自己处理十进制值单个位的方法(Decimal.GetBits 和 Decimal.Decimal(Int32[]))以及一套执行其他数学运算的方法。
Double 和 Single 类型旨在用于本质上不精确的值(例如,两颗行星之间的距离)和无需高度精确和舍入误差小的应用程序。在需要较高准确度和尽量减小舍入误差的情况下,应使用 System.Decimal 类型。
备注
Decimal 类型不会消除对舍入的要求。相反,它最大限度地减少了因舍入而导致的错误。
ComplexComplex
System.Numerics.Complex 结构表示复数,即带实数部分和虚数部分的数字。此类型支持一套标准的算术、比较、相等、显式和隐式转换运算符,以及数学、代数和三角方法。
启用了 SIMD 的类型SIMD-enabled types
System.Numerics 命名空间包含一组启用了 .NET SIMD 的类型。SIMD (Single Instruction Multiple Data) 操作可以在硬件级别并行化。这可以增加向量化计算的吞吐量,这在数学、科学和图形应用中很常见。
启用了 .NET SIMD 的类型如下:
Plane 类型,表示三维空间中的一个平面。
Quaternion 类型,表示一个用于对三维物理旋转进行编码的向量。
Vector
类型,表示指定数字类型的向量,并提供受益于 SIMD 支持的一组广泛的运算符。Vector 实例的计数是固定的,但其值 Vector .Count 取决于执行代码的计算机的 CPU。
备注
Vector
启用了 SIMD 的类型以这样一种方式实现:即它们可以与未启用 SIMD 的硬件或 JIT 编译器一起使用。要利用 SIMD 指令,你的 64 位应用必须由使用 RyuJIT 编译器的运行时运行,该编译器包含在 .NET Core 和 .NET Framework 4.6 及更高版本中。它针对 64 位处理器增加了 SIMD 支持。