Rekenkundige operatoren
In dit onderwerp worden rekenkundige operators beschreven die beschikbaar zijn in F#.
Samenvatting van binaire rekenkundige operatoren
De volgende tabel bevat een overzicht van de binaire rekenkundige operatoren die beschikbaar zijn voor niet-postvakken integraal en drijvende kommatypen.
Binaire operator | Opmerkingen |
---|---|
+ (toevoeging, plus) |
Niet geselecteerd. Mogelijke overloopvoorwaarde wanneer getallen worden opgeteld en de som de maximum absolute waarde overschrijdt die door het type wordt ondersteund. |
- (aftrekken, minteken) |
Niet geselecteerd. Mogelijke onderloopvoorwaarde wanneer niet-ondertekende typen worden afgetrokken of wanneer waarden met drijvende komma te klein zijn om door het type te worden weergegeven. |
* (vermenigvuldiging, tijden) |
Niet geselecteerd. Mogelijke overloopvoorwaarde wanneer getallen worden vermenigvuldigd en het product de maximum absolute waarde overschrijdt die door het type wordt ondersteund. |
/ (delen, gedeeld door) |
Delen door nul veroorzaakt een DivideByZeroException voor integrale typen. Voor typen drijvende komma geeft delen door nul u de speciale drijvendekommawaarden infinity of -infinity . Er is ook een mogelijke onderloopvoorwaarde wanneer een drijvendekommagetal te klein is om te worden vertegenwoordigd door het type. |
% (rest, rem) |
Retourneert de rest van een delingsbewerking. Het teken van het resultaat is hetzelfde als het teken van de eerste operand. |
** (exponentiatie, aan de macht van) |
Mogelijke overloopvoorwaarde wanneer het resultaat de maximum absolute waarde voor het type overschrijdt. De exponentiatieoperator werkt alleen met typen drijvende komma. |
Samenvatting van Unary Arithmetic Operators
De volgende tabel bevat een overzicht van de unaire rekenkundige operatoren die beschikbaar zijn voor integrale en drijvende kommatypen.
Unaire operator | Opmerkingen |
---|---|
+ (positief) |
Kan worden toegepast op elke rekenkundige expressie. Wijzigt het teken van de waarde niet. |
- (negatie, negatief) |
Kan worden toegepast op elke rekenkundige expressie. Hiermee wijzigt u het teken van de waarde. |
Het gedrag bij overloop of onderloop voor integrale typen is om rond te lopen. Dit veroorzaakt een onjuist resultaat. Overloop van gehele getallen is een mogelijk ernstig probleem dat kan bijdragen aan beveiligingsproblemen wanneer software hiervoor niet is geschreven. Als dit een probleem is voor uw toepassing, kunt u overwegen de ingecheckte operators te Microsoft.FSharp.Core.Operators.Checked
gebruiken.
Samenvatting van binaire vergelijkingsoperators
In de volgende tabel ziet u de binaire vergelijkingsoperatoren die beschikbaar zijn voor integrale en drijvende kommatypen. Deze operators retourneren waarden van het type bool
.
Getallen met drijvende komma mogen nooit rechtstreeks worden vergeleken voor gelijkheid, omdat de IEEE-drijvendekommage-representatie geen exacte gelijkheidsbewerking ondersteunt. Twee getallen die u eenvoudig kunt verifiëren om gelijk te zijn door de code te controleren, hebben mogelijk verschillende bitweergaven.
Operator | Opmerkingen |
---|---|
= (gelijkheid, gelijk aan) |
Dit is geen toewijzingsoperator. Deze wordt alleen gebruikt voor vergelijking. Dit is een algemene operator. |
> (groter dan) |
Dit is een algemene operator. |
< (kleiner dan) |
Dit is een algemene operator. |
>= (groter dan of gelijk aan) |
Dit is een algemene operator. |
<= (kleiner dan of gelijk aan) |
Dit is een algemene operator. |
<> (niet gelijk aan) |
Dit is een algemene operator. |
Overbelaste en algemene operators
Alle operators die in dit onderwerp worden besproken, worden gedefinieerd in de naamruimte Microsoft.FSharp.Core.Operators . Sommige operators worden gedefinieerd met behulp van statisch opgeloste typeparameters. Dit betekent dat er afzonderlijke definities zijn voor elk specifiek type dat met die operator werkt. Alle unaire en binaire rekenkundige en bitgewijze operatoren bevinden zich in deze categorie. De vergelijkingsoperatoren zijn algemeen en werken daarom met elk type, niet alleen primitieve rekenkundige typen. Gediscrimineerde samenvoeg- en recordtypen hebben hun eigen aangepaste implementaties die worden gegenereerd door de F#-compiler. Klassetypen gebruiken de methode Equals.
De algemene operators kunnen worden aangepast. Als u de vergelijkingsfuncties wilt aanpassen, moet u overschrijven Equals om uw eigen aangepaste gelijkheidsvergelijking te bieden en vervolgens implementeren IComparable. De System.IComparable interface heeft één methode, de CompareTo methode.
Operators en type deductie
Het gebruik van een operator in een expressiebeperkingstype deductie voor die operator. Bovendien voorkomt het gebruik van operators automatische generalisatie, omdat het gebruik van operators een rekenkundig type impliceert. Als er geen andere informatie is, wordt de F#-compiler afgeleid int
als het type rekenkundige expressies. U kunt dit gedrag overschrijven door een ander type op te geven. De argumenttypen en het retourtype van function1
in de volgende code worden dus afgeleid, int
maar de typen function2
worden afgeleid 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