Aritmetické operátory (F#)
Toto téma popisuje aritmetické operátory, které jsou k dispozici v jazyce F#.
Souhrn binární aritmetické operátory
Následující tabulka shrnuje binární aritmetické operátory, které jsou k dispozici pro typy Variant nedílnou a plovoucí desetinnou čárkou.
Binární operátor |
Poznámky |
---|---|
+(navíc plus) |
Nezaškrtnuté.Možné přetečení při sečtení čísel a součet překračuje maximální absolutní hodnota podporovaného typu. |
-(odčítání, minus) |
Nezaškrtnuté.Možné podtečení podmínka se odečtou nepodepsané typy nebo jsou příliš malé, aby typ hodnoty s plovoucí desetinnou čárkou. |
*(násobení, časy) |
Nezaškrtnuté.Možné přetečení při čísla jsou vynásobena a produktu překračuje maximální absolutní hodnota podporovaného typu. |
/(divize děleno) |
Dělení nulovou příčiny DivideByZeroException pro typy integrálů.Typy s plovoucí desetinnou čárkou, dělení nulou nabízí speciální hodnoty s plovoucí desetinnou čárkou +Infinity nebo -Infinity.Je také možné podtečení podmínku po příliš malé a nelze podle typu číslo s plovoucí desetinnou čárkou. |
%(modul, mod) |
Vrátí zbytek operace rozdělení.Znaménko výsledku je stejné jako znaménko prvního operandu. |
**(umocnění výkonu) |
Pokud výsledek překročí maximální absolutní hodnota typu možného přetečení podmínka. Operátor umocnění pracuje pouze s typy s plovoucí desetinnou čárkou. |
Souhrn aritmetický unární operátory
Následující tabulka shrnuje unární aritmetické operátory, které jsou k dispozici pro typy nedílnou a plovoucí desetinnou čárkou.
Unární operátor |
Poznámky |
---|---|
+(kladné) |
Lze použít libovolný aritmetický výraz.Znaménko hodnoty nezmění. |
-(negace, negativní) |
Lze použít libovolný aritmetický výraz.Změní znaménko hodnoty. |
Chování při přetečení nebo podtečení u typů je okolo.To způsobuje nesprávný výsledek.Přetečení celého čísla je potenciálně závažné potíže, které mohou přispět k zabezpečení při software zapisuje na jeho účet.Pokud se týkají aplikace, zvažte použití kontrolované subjekty v Microsoft.FSharp.Core.Operators.Checked.
Souhrn binární operátory porovnání
Následující tabulka obsahuje binární relační operátory, které jsou k dispozici pro typy nedílnou a plovoucí desetinnou čárkou.Tyto operátory vracet hodnoty typu bool.
Desetinná čísla nikdy se porovná přímo pro rovnost, protože reprezentace s plovoucí desetinnou čárkou IEEE nepodporuje operaci přesné rovnosti.Dvě čísla, které lze snadno ověřit kontrolou kód se rovná skutečně mít zastoupení různých bit.
Operátor |
Poznámky |
---|---|
=(rovnost, rovná se) |
Operátor přiřazení není.Používá se pouze pro srovnání.Toto je obecný operátor. |
>(větší než) |
Toto je obecný operátor. |
<(menší než) |
Toto je obecný operátor. |
>=(větší než nebo rovno) |
Toto je obecný operátor. |
<=(menší než nebo rovno) |
Toto je obecný operátor. |
<>(není rovno) |
Toto je obecný operátor. |
Přetížená a obecné hospodářské subjekty
Všechny operátory uvedené v tomto tématu jsou definovány v Microsoft.FSharp.Core.Operators oboru názvů.Některé operátory jsou definovány pomocí parametrů typu staticky vyřešen.To znamená, že jsou jednotlivé definice pro každý typ pracuje s tímto operátorem.V této kategorii jsou všechny unárních a binárních operátorů aritmetické a bitového.Operátory porovnání jsou obecné a proto pracovat libovolný typ pouze primitivní typy aritmetické.Discriminated unie a typy záznamů mají své vlastní vlastní implementace, které jsou generovány kompilátor F#.Typy tříd pomocí metody Equals.
Obecný operátory jsou upravitelné.Chcete-li přizpůsobit funkce porovnání přepsat Equals a pak implementovat vlastní porovnání vlastní rovnosti IComparable.IComparable Rozhraní má jedinou metodu CompareTo metoda.
Operátory a odvození typu
Použití operátor ve výrazu omezuje odvození typu na tento operátor.Použití operátorů také zabrání automatické generalizace protože znamená použití operátorů aritmetické typu.Neexistují žádné další informace, odvodí kompilátor F# int jako typ aritmetické výrazy.Toto chování lze potlačit zadáním jiného typu.Tedy typy argumentů a návratový typ function1 v následujícím kódu odvodit se int, ale typy pro function2 jsou odvodit se 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