Next: `wi`

arithmetic on `poly_int`

s, Up: Arithmetic on `poly_int`

s [Contents][Index]

`poly_int`

with C++ arithmetic operatorsThe following C++ expressions are supported, where `p1` and `p2`
are `poly_int`

s and where `c1` and `c2` are scalars:

-p1~p1p1+p2p1+c2c1+p2p1-p2p1-c2c1-p2c1*p2p1*c2p1<<c2p1+=p2p1+=c2p1-=p2p1-=c2p1*=c2p1<<=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.