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

В .NET предоставляется диапазон целочисленных примитивов и примитивов с плавающей запятой, а также следующие типы.

  • System.Half, представляющий число с плавающей запятой половины точности.
  • System.Decimal, представляющий десятичное число с плавающей запятой.
  • System.Numerics.BigInteger, целочисленный тип без теоретических верхней или нижней границ.
  • System.Numerics.Complex, тип комплексных чисел.
  • Набор типов с поддержкой SIMD в пространстве имен System.Numerics.

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

.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 ±65 504 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 и более поздних версий содержит класс System.MathF, методы которого принимают аргументы с типом Single.

Вы также можете работать с отдельными битами значений типа Double, Single и Half с помощью класса System.BitConverter. Структура System.Decimal имеет собственные методы, Decimal.GetBits и Decimal(Int32[]), для работы с отдельными битами десятичного значения, а также собственный набор методов для выполнения некоторых дополнительных математических операций.

Типы Double, Single и Half предназначены для значений, которые по своему характеру являются неточными (например, расстояние между двумя звездами), и для случаев, когда не требуются высокая степень точности и малая погрешность округления. Тип System.Decimal используется в случаях, когда требуется большая точность и минимальная погрешность округления.

Примечание.

Тип Decimal не устраняет потребность в округлении. Но он сводит к минимуму ошибки, возникающие из-за округления.

Complex

Структура System.Numerics.Complex представляет комплексное число, то есть число, имеющее вещественную и мнимую части. Она поддерживает стандартный набор арифметических операторов, операторов сравнения, равенства, явного и неявного преобразования, а также математические, алгебраические и тригонометрические методы.

Типы с поддержкой SIMD

Пространство имен System.Numerics содержит набор типов .NET с поддержкой SIMD. Операции SIMD (Single Instruction Multiple Data) допускают параллельное выполнение на аппаратном уровне. Эта возможность повышает производительность векторизированных вычислений, которые широко применяются в математических, научных и графических приложениях.

Ниже перечислены типы .NET с поддержкой SIMD:

  • Типы Vector2, Vector3 и Vector4, которые представляют векторы с 2, 3 и 4 значениями Single.

  • Два матричных типа: Matrix3x2 для представления матрицы 3×2 и Matrix4x4 для представления матрицы 4×4.

  • Тип Plane, который представляет плоскость в трехмерном пространстве.

  • Тип Quaternion, который представляет вектор, используемый для кодирования трехмерных физических вращений.

  • Тип Vector<T>, который представляет вектор указанного числового типа и реализует широкий набор операторов, оптимизированных для поддержки SIMD. Vector<T> имеет фиксированное число экземпляров, но его значение Vector<T>.Count зависит от характеристик ЦП на компьютере, на котором выполняется код.

    Примечание.

    Тип Vector<T> входит в состав .NET Core и .NET 5 и более поздних версий, но не .NET Framework. Чтобы получить доступ к этому типу при использовании .NET Framework, необходимо установить пакет NuGet System.Numerics.Vectors.

Типы с поддержкой SIMD реализованы так, что их можно использовать на оборудовании и (или) с JIT-компиляторами, которые не поддерживают SIMD. Чтобы получить преимущество от использования инструкций SIMD, необходимо запустить 64-разрядное приложение в среде выполнения с компилятором RyuJIT. Он входит в состав .NET Core и .NET Framework 4.6 и более поздних версий. Он добавляет поддержку SIMD при нацеливании на 64-разрядные процессоры.

Дополнительные сведения см. в разделе Использование числовых типов с ускорением SIMD.

См. также