算術式
算術演算子は、加算 (+
)、減算 (-
)、乗算 (*
)、除算 (/
)、否定 (-
)、累乗 (^
) です。 これらは、型 Int
、BigInt
、または Double
のオペランドに適用できます 。 また、整数型 (Int
および BigInt
) では、剰余 (%
) を計算する演算子を使用できます。
2 項演算子の場合、両方のオペランドの型は、累乗の場合を除き、一致している必要があります。型 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
データ型では重要であり、これによってランタイム情報の伝達方法の制限が助長されます。 利点として、精度の損失といった偶発的なエラーを回避できます。