poly_int
with C++ arithmetic operators ¶The following C++ expressions are supported, where p1 and p2
are poly_int
s and where c1 and c2 are scalars:
-p1 ~p1 p1 + p2 p1 + c2 c1 + p2 p1 - p2 p1 - c2 c1 - p2 c1 * p2 p1 * c2 p1 << c2 p1 += p2 p1 += c2 p1 -= p2 p1 -= c2 p1 *= c2 p1 <<= c2
These arithmetic operations handle integer ranks in a similar way
to C++. The main difference is that every coefficient narrower than
HOST_WIDE_INT
promotes to HOST_WIDE_INT
, whereas in
C++ everything narrower than int
promotes to int
.
For example:
poly_uint16 + int -> poly_int64 unsigned int + poly_uint16 -> poly_int64 poly_int64 + int -> poly_int64 poly_int32 + poly_uint64 -> poly_uint64 uint64 + poly_int64 -> poly_uint64 poly_offset_int + int32 -> poly_offset_int offset_int + poly_uint16 -> poly_offset_int
In the first two examples, both coefficients are narrower than
HOST_WIDE_INT
, so the result has coefficients of type
HOST_WIDE_INT
. In the other examples, the coefficient
with the highest rank “wins”.
If one of the operands is wide_int
or poly_wide_int
,
the rules are the same as for wide_int
arithmetic.