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


Арифметические операторы (F#)

В этом разделе описаны арифметические операторы, которые доступны в языке F#.

Сводка бинарных арифметических операторов

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

Бинарный оператор

Примечания

+ (сложение, плюс)

Не проверяются.Возможно переполнение, когда при сложении чисел сумма превышает максимальное абсолютное значение, поддерживаемое типом.

- (вычитание, минус)

Не проверяются.Возможна потеря значимости при вычитании типов без знака, или если значения с плавающей запятой оказываются слишком маленькими для представления заданным типом.

* (умножение)

Не проверяются.Возможно переполнение, когда при перемножении чисел произведение превышает максимальное абсолютное значение, поддерживаемое типом.

/ (деление)

Для целочисленных типов деление на нуль вызывает исключение DivideByZeroException.Для типов с плавающей запятой деление на нуль приводит к специальным значениям с плавающей запятой +Infinity или -Infinity.Также возможна потеря значимости, если значения с плавающей запятой оказываются слишком маленькими для представления заданным типом.

% (модуль, остаток)

Возвращает остаток от деления.Знак результата совпадает со знаком первого операнда.

** (экспонента, возведение в степень)

Возможно переполнение, когда результат превышает максимальное абсолютное значение, поддерживаемое типом.

Оператор возведения в степень применим только к типам с плавающей запятой.

Сводка унарных арифметических операторов

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

Унарный оператор

Примечания

+ (плюс)

Может применяться к любому арифметическому выражению.Не изменяет знак значения.

- (отрицание, минус)

Может применяться к любому арифметическому выражению.Изменяет знак значения.

При возникновении переполнения или потери значимости для целых чисел происходит "циклический переход".Это приводит к появлению неверного результата.Переполнение для целых чисел представляет собой потенциально опасную проблему, которая может привести к серьезным неполадкам, если в программном обеспечении не предусмотрены соответствующие механизмы обработки подобных ситуаций.Если это важно для разрабатываемого приложения, следует рассмотреть возможность использования проверяемых операторов (Microsoft.FSharp.Core.Operators.Checked).

Сводка бинарных операторов сравнения

В следующей таблице описаны бинарные операторы сравнения, доступные для целочисленных типов и типов с плавающей запятой.Эти операторы возвращают значения типа bool.

Никогда не сравнивайте в явном виде значения чисел с плавающей запятой, поскольку представление чисел с плавающей запятой IEEE не поддерживает операцию точного равенства.Два числа, которые могут казаться равными при проверке кода, могут иметь различные битовые представления.

Оператор

Примечания

= (равенство, равняется)

Это не оператор присваивания.Он используется только для сравнения.Это универсальный оператор.

> (больше)

Это универсальный оператор.

< (меньше)

Это универсальный оператор.

>= (больше или равно)

Это универсальный оператор.

<= (меньше или равно)

Это универсальный оператор.

<> (не равно)

Это универсальный оператор.

Перегруженные и универсальные операторы

Все описанные в данном разделе операторы определены в пространстве имен Microsoft.FSharp.Core.Operators.Некоторые операторы определены с помощью статически разрешаемых параметров типов.Это значит, что имеются отдельные определения для каждого конкретного типа, поддерживающего данный оператор.К этой категории относятся все унарные и бинарные арифметические и побитовые операторы.Операторы сравнения являются универсальными и работают с любым типом, а не только с простыми арифметическими типами.У размеченного объединения и типов записей имеются собственные пользовательские реализации, которые создаются компилятором F#.Типы классов используют метод Equals.

Универсальные операторы можно настраивать.Чтобы настроить функции сравнения, переопределите метод Equals с использованием собственных правил определения равенства, а затем реализуйте интерфейс IComparable.Интерфейс IComparable содержит единственный метод — CompareTo.

Операторы и определение типа

Использование оператора в выражении ограничивает определение типа для этого оператора.Кроме того, использование операторов не допускает автоматического обобщения, поскольку использование операторов подразумевает, что операнды относятся к арифметическим типам.В отсутствии другой информации компилятор F# использует в качестве типа арифметических выражений тип int.Это поведение можно переопределить, указав другой тип.Так, предполагается, что аргументы и возвращаемое значение функции function1 в следующем фрагменте кода имеют тип int, а соответствующие значения для функции function2 — тип float.

// x, y and return value inferred to be int
// function1: int -> int -> int
let function1 x y = x + y

// x, y and return value inferred to be float
// function2: float -> float -> float
let function2 (x: float) y = x + y

См. также

Ссылки

Справочник символов и операторов (F#)

Перегрузка операторов (F#)

Побитовые операторы (F#)

Логические операторы (F#)