Арифметические выражения
Арифметические операторы — это сложение (+
), вычитание (-
), умножение (*
), деление (/
), отрицание (-
) и возведение в степень (^
). Они могут применяться к операндам типа Int
, BigInt
или Double
. Кроме того, для целочисленных типов (Int
и BigInt
) доступен оператор получения остатка от деления (%
).
Для бинарных операторов тип обоих операндов должен совпадать, за исключением возведения в степень. Экспонента для значения типа BigInt
должна иметь тип Int
. Тип всего выражения совпадает с типом левого операнда. Для типов Int
и BitInt
поведение операции возведения в степень не определено, если экспонента отрицательна или для ее представления требуется более 32 бит (т. е. она больше 2147483647).
Деление и получение остатка от деления для значений типа Int
и BigInt
производится следующим образом для отрицательных чисел:
A |
B |
A / B |
A % B |
---|---|---|---|
5 | 2 | 2 | 1 |
5 | -2 | -2 | 1 |
-5 | 2 | -2 | -1 |
-5 | -2 | 2 | -1 |
То есть a % b
всегда имеет тот же знак, что и a
, а b * (a / b) + a % b
всегда равно a
.
Q# не поддерживает автоматическое преобразование арифметических типов данных, так же как и любых других. Это особенно важно для типа данных Result
и позволяет упростить ограничение распространения данных во время выполнения. Благодаря этому можно избежать случайных ошибок, например, связанных с потерей точности.