Поделиться через


Числовые значения в .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 ±65504 нет Представлено в .NET 5
System.Single 4 ±3.4 x 1038 Да
System.Double 8 ±1.7 ×10 308 Да
System.Decimal 16 ±7.9228 x 1028 нет

Типы 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 не устраняет необходимость округления. Скорее, это сводит к минимуму ошибки из-за округления.

Сложный

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

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

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

Типы с поддержкой .NET SIMD включают следующие:

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

  • Два типа матрицы, Matrix3x2представляющая матрицу 3x2 и Matrix4x4представляющую матрицу 4x4.

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

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

См. также