Арифметические операторы

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

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

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

бинарный оператор; Примечания.
+ (добавление, плюс) Флажок снят. Возможное условие переполнения при добавлении чисел вместе и сумма превышает максимальное абсолютное значение, поддерживаемое типом.
- (вычитание, минус) Флажок снят. Возможное условие подтека, если вычитаются неподписанные типы или если значения с плавающей запятой слишком малы, чтобы быть представлен типом.
* (умножение, время) Флажок снят. Возможное условие переполнения при умножении чисел и продукт превышает максимальное абсолютное значение, поддерживаемое типом.
/ (деление, разделенное на) Деление по нулю приводит DivideByZeroException к целочисленным типам. Для типов с плавающей запятой деление по нулю дает специальные значения infinity с плавающей запятой или -infinity. Существует также возможное условие подтека, когда число с плавающей запятой слишком мало, чтобы быть представлен типом.
% (оставшаяся часть, рем) Возвращает оставшуюся часть операции деления. Знак результата совпадает с знаком первого операнда.
** (экспоненциация, в силу) Возможное условие переполнения, если результат превышает максимальное абсолютное значение для типа.

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

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

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

Унарный оператор Примечания.
+ (положительный) Может применяться к любому арифметическому выражению. Не изменяет знак значения.
- (отрицание, отрицательное) Может применяться к любому арифметическому выражению. Изменяет знак значения.

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

Сводка операторов сравнения двоичных файлов

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

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

Оператор Примечания.
= (равенство, равно) Это не оператор назначения. Он используется только для сравнения. Это универсальный оператор.
> (больше чем); Это универсальный оператор.
< (меньше чем); Это универсальный оператор.
>= (больше или равно) Это универсальный оператор.
<= (меньше или равно) Это универсальный оператор.
<> (не равно) Это универсальный оператор.

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

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

Универсальные операторы настраиваются. Чтобы настроить функции сравнения, переопределите Equals , чтобы обеспечить собственное сравнение равенства, а затем реализовать IComparable. Интерфейс System.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

См. также