Числовые значения в .NETNumerics in .NET

Платформа .NET предоставляет в пространстве имен System.Numerics разные примитивы для целых чисел и чисел с плавающей запятой, а также System.Numerics.BigInteger (целочисленный тип, не имеющий теоретической верхней и нижней границы), System.Numerics.Complex (тип для представления комплексных чисел) и набор типов с поддержкой SIMD..NET provides a range of numeric integer and floating-point primitives, as well as System.Numerics.BigInteger, which is an integral type with no theoretical upper or lower bound, System.Numerics.Complex, which represents complex numbers, and a set of SIMD-enabled types in the System.Numerics namespace.

Целочисленные типыInteger types

Платформа .NET поддерживает целочисленные типы со знаком и без знака с разрядностью 8, 16, 32 и 64 бита. Полный список приводится в следующей таблице..NET supports both signed and unsigned 8-, 16-, 32-, and 64-bit integer types, which are listed in the following table:

ТипType Со знаком или безSigned/Unsigned Размер (в байтах)Size (in bytes) Минимальное значениеMinimum value Максимальное значениеMaximum value
System.Byte Без знакаUnsigned 11 00 255255
System.Int16 Со знакомSigned 22 –32 768-32,768 32 76732,767
System.Int32 Со знакомSigned 44 –2 147 483 648-2,147,483,648 2 147 483 6472,147,483,647
System.Int64 Со знакомSigned 88 –9 223 372 036 854 775 808-9,223,372,036,854,775,808 9 223 372 036 854 775 8079,223,372,036,854,775,807
System.SByte Со знакомSigned 11 –128-128 127127
System.UInt16 Без знакаUnsigned 22 00 65 53565,535
System.UInt32 Без знакаUnsigned 44 00 4 294 967 2954,294,967,295
System.UInt64 Без знакаUnsigned 88 00 18 446 744 073 709 551 61518,446,744,073,709,551,615

Каждый целочисленный тип поддерживает набор стандартных арифметических операторов.Each integer type supports a set of standard arithmetic operators. Класс System.Math предоставляет методы для широкого набора математических функций.The System.Math class provides methods for a broader set of mathematical functions.

Вы также можете работать с отдельными битами целочисленного значения с помощью класса System.BitConverter.You can also work with the individual bits in an integer value by using the System.BitConverter class.

Примечание

Целочисленные типы без знака не совместимы с CLS.The unsigned integer types are not CLS-compliant. Для получения дополнительной информации см. Language Independence and Language-Independent Components.For more information, see Language Independence and Language-Independent Components.

BigIntegerBigInteger

Структура System.Numerics.BigInteger является неизменяемым типом, который представляет произвольно большое целое число. Для него в теории не существует верхней или нижней границы.The System.Numerics.BigInteger structure is an immutable type that represents an arbitrarily large integer whose value in theory has no upper or lower bounds. Методы типа BigInteger во многом повторяют методы других целочисленных типов.The methods of the BigInteger type closely parallel those of the other integral types.

Типы с плавающей запятойFloating-point types

Платформа .NET поддерживает три примитива с плавающей запятой, которые перечислены в таблице ниже..NET includes three primitive floating-point types, which are listed in the following table:

ТипType Размер (в байтах)Size (in bytes) Приблизительный диапазон значенийApproximate range ТочностьPrecision
System.Single 44 От ±1,5 x 10−45 до ±3,4 x 1038±1.5 x 10−45 to ±3.4 x 1038 6–9 цифр~6-9 digits
System.Double 88 от ±5,0 × 10−324 до ±1,7 × 10308±5.0 × 10−324 to ±1.7 × 10308 15–17 цифр~15-17 digits
System.Decimal 1616 от ±1,0 x 10-28 до ±7,9228 x 1028±1.0 x 10-28 to ±7.9228 x 1028 28-29 знаков28-29 digits

Оба типа Single и Double поддерживают специальные значения, обозначающие бесконечность и нечисловое значение.Both Single and Double types support special values that represent not-a-number and infinity. Например, тип Double предоставляет следующие значения: Double.NaN, Double.NegativeInfinity и Double.PositiveInfinity.For example, the Double type provides the following values: Double.NaN, Double.NegativeInfinity, and Double.PositiveInfinity. Для проверки на эти значения применяются методы Double.IsNaN, Double.IsInfinity, Double.IsPositiveInfinity и Double.IsNegativeInfinity.You use the Double.IsNaN, Double.IsInfinity, Double.IsPositiveInfinity, and Double.IsNegativeInfinity methods to test for these special values.

Каждый тип с плавающей запятой поддерживает набор стандартных арифметических операторов.Each floating-point type supports a set of standard arithmetic operators. Класс System.Math предоставляет методы для широкого набора математических функций.The System.Math class provides methods for a broader set of mathematical functions. .NET Core 2.0 и более поздних версий содержит класс System.MathF, методы которого принимают аргументы с типом Single..NET Core 2.0 and later includes the System.MathF class that provides methods which accept arguments of the Single type.

Вы также можете работать с отдельными битами значений типа Double и Single с помощью класса System.BitConverter.You can also work with the individual bits in Double and Single values by using the System.BitConverter class. Структура System.Decimal имеет собственные методы, Decimal.GetBits и Decimal.Decimal(Int32[]), для работы с отдельными битами десятичного значения, а также собственный набор методов для выполнения некоторых дополнительных математических операций.The System.Decimal structure has its own methods, Decimal.GetBits and Decimal.Decimal(Int32[]), for working with a decimal value's individual bits, as well as its own set of methods for performing some additional mathematical operations.

Типы Double и Single предназначены для значений, которые по своему характеру являются неточными (например, расстояние между двумя звездами), и для случаев, когда не требуются высокая степень точности и малая погрешность округления.The Double and Single types are intended to be used for values that by their nature are imprecise (for example, the distance between two stars) and for applications in which a high degree of precision and small rounding error is not required. Тип System.Decimal следует использовать в случаях, когда требуется большая точность и минимальная погрешность округления.You should use the System.Decimal type for cases in which greater precision is required and rounding errors should be minimized.

Примечание

Тип Decimal не устраняет потребность в округлении.The Decimal type doesn't eliminate the need for rounding. Но он сводит к минимуму ошибки, возникающие из-за округления.Rather, it minimizes errors due to rounding.

ComplexComplex

Структура System.Numerics.Complex представляет комплексное число, то есть число, имеющее вещественную и мнимую части.The System.Numerics.Complex structure represents a complex number, that is, a number with a real number part and an imaginary number part. Она поддерживает стандартный набор арифметических операторов, операторов сравнения, равенства, явного и неявного преобразования, а также математические, алгебраические и тригонометрические методы.It supports a standard set of arithmetic, comparison, equality, explicit and implicit conversion operators, as well as mathematical, algebraic, and trigonometric methods.

Типы с поддержкой SIMDSIMD-enabled types

Пространство имен System.Numerics содержит набор типов .NET с поддержкой SIMD.The System.Numerics namespace includes a set of .NET SIMD-enabled types. Операции SIMD (Single Instruction Multiple Data) допускают параллельное выполнение на аппаратном уровне.SIMD (Single Instruction Multiple Data) operations can be parallelized at the hardware level. Эта возможность повышает производительность векторизированных вычислений, которые широко применяются в математических, научных и графических приложениях.That increases the throughput of the vectorized computations, which are common in mathematical, scientific, and graphics apps.

Ниже перечислены типы .NET с поддержкой SIMD:The .NET SIMD-enabled types include the following:

  • Типы Vector2, Vector3 и Vector4, которые представляют векторы с 2, 3 и 4 значениями Single.The Vector2, Vector3, and Vector4 types, which represent vectors with 2, 3, and 4 Single values.

  • Два матричных типа: Matrix3x2 для представления матрицы 3×2 и Matrix4x4 для представления матрицы 4×4.Two matrix types, Matrix3x2, which represents a 3x2 matrix, and Matrix4x4, which represents a 4x4 matrix.

  • Тип Plane, который представляет плоскость в трехмерном пространстве.The Plane type, which represents a plane in three-dimensional space.

  • Тип Quaternion, который представляет вектор, используемый для кодирования трехмерных физических вращений.The Quaternion type, which represents a vector that is used to encode three-dimensional physical rotations.

  • Тип Vector<T>, который представляет вектор указанного числового типа и реализует широкий набор операторов, оптимизированных для поддержки SIMD.The Vector<T> type, which represents a vector of a specified numeric type and provides a broad set of operators that benefit from SIMD support. Vector<T> имеет фиксированное число экземпляров, но его значение Vector<T>.Count зависит от характеристик ЦП на компьютере, на котором выполняется код.The count of a Vector<T> instance is fixed, but its value Vector<T>.Count depends on the CPU of the machine, on which code is executed.

    Примечание

    Тип Vector<T> не входит в .NET Framework.The Vector<T> type is not included into the .NET Framework. Чтобы получить доступ к этому типу, необходимо установить пакет NuGet System.Numerics.Vectors.You must install the System.Numerics.Vectors NuGet package to get access to this type.

Типы с поддержкой SIMD реализованы так, что их можно использовать на оборудовании и (или) с JIT-компиляторами, которые не поддерживают SIMD.The SIMD-enabled types are implemented in such a way that they can be used with non-SIMD-enabled hardware or JIT compilers. Чтобы получить преимущество от использования инструкций SIMD, необходимо запустить 64-разрядное приложение в среде выполнения с компилятором RyuJIT. Он входит в состав .NET Core и .NET Framework 4.6 и более поздних версий.To take advantage of SIMD instructions, your 64-bit apps must be run by the runtime that uses the RyuJIT compiler, which is included in .NET Core and in the .NET Framework 4.6 and later versions. Он добавляет поддержку SIMD при нацеливании на 64-разрядные процессоры.It adds SIMD support when targeting 64-bit processors.

См. такжеSee also