Udostępnij za pośrednictwem


Wyrażenia arytmetyczne

Operatory arytmetyczne są dodawanie (+), odejmowanie (-), mnożenie (*), dzielenie (/), negacja (-) i wykładnik (^). Można je stosować do operandów typu Int, BigIntlub Double. Ponadto w przypadku typów całkowitych (Int i BigInt) dostępny jest operator obliczeniowy modulus (%).

W przypadku operatorów binarnych typ obu operandów musi być zgodny, z wyjątkiem wykładnika; wykładnik wartości typu BigInt musi być typu Int. Typ całego wyrażenia jest zgodny z typem lewego operandu. W przypadku wykładnika Int i BitIntzachowanie jest niezdefiniowane, jeśli wykładnik jest ujemny lub wymaga więcej niż 32 bitów do reprezentowania (czyli jeśli jest większy niż 2147483647).

Dzielenie i modulo wartości typu Int i BigInt są zgodne z następującym zachowaniem dla liczb ujemnych:

A B A / B A % B
5 2 2 1
5 -2 -2 1
-5 2 -2 -1
-5 -2 2 -1

Oznacza to, że a % b zawsze ma ten sam znak co a, a b * (a / b) + a % b zawsze równa się a.

Q# nie obsługuje automatycznych konwersji między typami danych arytmetycznych ani żadnymi innymi typami danych. Jest to ważne szczególnie w przypadku Result typu danych i ułatwia ograniczenie sposobu propagacji informacji środowiska uruchomieniowego. Ma to korzyść z unikania przypadkowych błędów, takich jak te związane z utratą precyzji.