Поделиться через


Арифметические выражения

Арифметические операторы — это сложение (+), вычитание (-), умножение (*), деление (/), отрицание (-) и возведение в степень (^). Они могут применяться к операндам типа 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 и позволяет упростить ограничение распространения данных во время выполнения. Благодаря этому можно избежать случайных ошибок, например, связанных с потерей точности.