Search
View source code
Display the source code in core/checkedint.d from which this page was generated on github.
Report a bug
If you spot a problem with this page, click here to create a Bugzilla issue.
Quickly fork, edit online, and submit a pull request for this page. Requires a signed-in GitHub account. This works well for small changes. If you'd like to make larger changes you may want to consider using local clone.

Function `core.checkedint.muls`

Multiply two signed integers, checking for overflow.

``` int muls (   int x,   int y,   ref bool overflow ); long muls (   long x,   long y,   ref bool overflow ); ```

The overflow is sticky, meaning a sequence of operations can be done and overflow need only be checked at the end.

Parameters

NameDescription
x left operand
y right operand
overflow set if an overflow occurs, is not affected otherwise

the product

Example

``````bool overflow;
writeln(muls(2, 3, overflow)); // 6
assert(!overflow);

writeln(muls(-200, 300, overflow)); // -60_000
assert(!overflow);

writeln(muls(1, int.max, overflow)); // int.max
assert(!overflow);

writeln(muls(int.min, 1, overflow)); // int.min
assert(!overflow);

writeln(muls(int.max, 2, overflow)); // (int.max * 2)
assert(overflow);

overflow = false;
writeln(muls(int.min, -1, overflow)); // int.min
assert(overflow);

writeln(muls(0, 0, overflow)); // 0
assert(overflow);                   // sticky
``````

Example

``````bool overflow;
writeln(muls(2L, 3L, overflow)); // 6
assert(!overflow);

writeln(muls(-200L, 300L, overflow)); // -60_000
assert(!overflow);

writeln(muls(1, long.max, overflow)); // long.max
assert(!overflow);

writeln(muls(long.min, 1L, overflow)); // long.min
assert(!overflow);

writeln(muls(long.max, 2L, overflow)); // (long.max * 2)
assert(overflow);
overflow = false;

writeln(muls(-1L, long.min, overflow)); // long.min
assert(overflow);

overflow = false;
writeln(muls(long.min, -1L, overflow)); // long.min
assert(overflow);

writeln(muls(0L, 0L, overflow)); // 0
assert(overflow);                   // sticky
``````

Walter Bright