Арифметические операторы
В этом разделе описываются арифметические операторы, доступные в 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