Числовые значения в .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.