Partager via


Opérateurs arithmétiques (F#)

Cette rubrique décrit les opérateurs arithmétiques disponibles dans le langage F#.

Résumé des opérateurs arithmétiques binaires

Le tableau suivant résume les opérateurs arithmétiques binaires qui sont disponibles pour les types intégraux et à virgule flottante unboxed.

Opérateur binaire

Remarques

+ (addition, plus)

Non activé. Condition de dépassement de capacité positif possible lorsque des nombres sont ajoutés et que la somme dépasse la valeur absolue maximale prise en charge par le type.

- (soustraction, moins)

Non activé. Condition de dépassement de capacité négatif possible lorsque des types non signés sont soustraits ou lorsque des valeurs à virgule flottante sont trop petites pour être représentées par le type.

* (multiplication, fois)

Non activé. Condition de dépassement de capacité positif possible lorsque des nombres sont multipliés et que le produit dépasse la valeur absolue maximale prise en charge par le type.

/ (division, divisé par)

La division par zéro provoque un DivideByZeroException pour les types intégraux. Pour les types à virgule flottante, la division par zéro vous donne les valeurs à virgule flottante spéciales +Infinity ou -Infinity. Il est également possible qu'une condition de dépassement de capacité négatif se produise lorsqu'un nombre à virgule flottante est trop petit pour être représenté par le type.

% (modulo, modulo)

Retourne le reste d'une division. Le signe du résultat est le même que le signe du premier opérande.

** (élévation à la puissance, puissance)

Condition de dépassement de capacité positif possible lorsque le résultat dépasse la valeur absolue maximale pour le type.

L'opérateur d'élévation à une puissance fonctionne uniquement avec les types à virgule flottante.

Résumé des opérateurs arithmétiques unaires

Le tableau suivant résume les opérateurs arithmétiques unaires qui sont disponibles pour les types intégraux et à virgule flottante.

Opérateur unaire

Remarques

+ (positif)

Peut être appliqué à n'importe quelle expression arithmétique. Ne modifie pas le signe de la valeur.

- (négation, négatif)

Peut être appliqué à n'importe quelle expression arithmétique. Modifie le signe de la valeur.

Le comportement en cas de dépassement de capacité positif ou négatif pour les types intégraux est le renvoi à la ligne. Ceci provoque un résultat incorrect. Le dépassement sur les entiers est un problème potentiellement grave qui peut contribuer à des problèmes de sécurité lorsque le logiciel n'est pas écrit pour en tenir compte. Si ce problème se pose pour votre application, envisagez d'utiliser les opérateurs checked dans Microsoft.FSharp.Core.Operators.Checked.

Résumé des opérateurs de comparaison binaires

Le tableau suivant montre les opérateurs de comparaison binaires qui sont disponibles pour les types intégraux et à virgule flottante. Ces opérateurs retournent des valeurs de type bool.

Les nombres à virgule flottante ne doivent jamais être directement comparés à la recherche d'une égalité, car la représentation de la virgule flottante IEEE ne prend pas en charge d'opération d'égalité exacte. Deux nombres dont vous pouvez facilement vérifier l'égalité en inspectant le code peuvent en fait avoir des représentations de bit différentes.

Opérateur

Remarques

= (égalité, est égal à)

Il ne s'agit pas d'un opérateur d'assignation. Il est utilisé uniquement pour la comparaison. Il s'agit d'un opérateur générique.

> (supérieur à)

Il s'agit d'un opérateur générique.

< (inférieur à)

Il s'agit d'un opérateur générique.

>= (supérieur ou égal à)

Il s'agit d'un opérateur générique.

<= (inférieur ou égal à)

Il s'agit d'un opérateur générique.

<> (différent)

Il s'agit d'un opérateur générique.

Opérateurs surchargés et génériques

Tous les opérateurs traités dans cette rubrique sont définis dans l'espace de noms Microsoft.FSharp.Core.Operators. Certains des opérateurs sont définis à l'aide de paramètres de type résolus statiquement. Cela signifie qu'il existe des définitions individuelles pour chaque type spécifique fonctionnant avec cet opérateur. Tous les opérateurs arithmétiques et de bits unaires et binaires appartiennent à cette catégorie. Les opérateurs de comparaison sont génériques et fonctionnent par conséquent avec n'importe quel type, et pas seulement des types arithmétiques primitifs. Les types d'union discriminée et d'enregistrement ont leurs propres implémentations personnalisées qui sont générées par le compilateur F#. Les types de classe utilisent la méthode Equals.

Les opérateurs génériques sont personnalisables. Pour personnaliser les fonctions de comparaison, substituez Equals pour fournir votre propre comparaison d'égalité personnalisée, puis implémentez IComparable. L'interface IComparable a une méthode unique : CompareTo.

Opérateurs et inférence de type

L'utilisation d'un opérateur dans une expression contraint l'inférence de type sur cet opérateur. En outre, l'utilisation d'opérateurs empêche la généralisation automatique, car l'utilisation d'opérateurs implique un type arithmétique. En cas d'absence de toute autre information, le compilateur F# déduit le type int pour les expressions arithmétiques. Vous pouvez substituer ce comportement en spécifiant un autre type. Ainsi, le compilateur déduit que les types d'argument et le type de retour de function1 dans le code suivant sont int, mais il déduit que le type de function2 est 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

Voir aussi

Référence

Référence des symboles et opérateurs (F#)

Surcharge d'opérateur (F#)

Opérateurs de bits (F#)

Opérateurs booléens (F#)