Udostępnij za pośrednictwem


Wyrażenia arytmetyczne

Operatory arytmetyczne to dodawanie (), odejmowanie (), mnożenie (), dzielenie (), negacja (-/) i wykładnik (^).+-* Można je zastosować do operandów typu Int, BigIntlub 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 asię .

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.