Wyrażenia arytmetyczne
Operatory arytmetyczne to dodawanie (), odejmowanie (), mnożenie (), dzielenie (), negacja (-
/
) i wykładnik (^
).+
-
*
Można je zastosować do operandów typu Int
, BigInt
lub Double
. Ponadto w przypadku typów całkowitych (Int
i BigInt
) jest dostępny operator obliczeniowy modulu (%
).
W przypadku operatorów binarnych typ obu operandów musi być zgodny, z wyjątkiem wykładnika; wykładnik dla wartości typu BigInt
musi być typu Int
. Typ całego wyrażenia jest zgodny z typem lewego operandu. W przypadku wykładnicza Int
i BitInt
, zachowanie 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).
Podział i modulus dla wartości typu Int
i BigInt
postępuj zgodnie 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, a % b
że zawsze ma taki sam znak jak a
, i b * (a / b) + a % b
zawsze równa a
się .
Q# nie obsługuje automatycznych konwersji między typami danych arytmetycznych ani innymi typami danych. Jest to ważne szczególnie w przypadku Result
typu danych i ułatwia ograniczenie sposobu propagacji informacji o czasie wykonywania. Ma to korzyść z unikania przypadkowych błędów, takich jak te związane z utratą dokładności.