Instance Method

multipliedFullWidth(by:)

Returns a tuple containing the high and low parts of the result of multiplying this value by the given value.

Declaration

func multipliedFullWidth(by other: Int32) -> (high: Int32, low: Int32.Magnitude)

Parameters

other

The value to multiply this value by.

Return Value

A tuple containing the high and low parts of the result of multiplying this value and other.

Discussion

Use this method to calculate the full result of a product that would otherwise overflow. Unlike traditional truncating multiplication, the multipliedFullWidth(by:) method returns a tuple containing both the high and low parts of the product of this value and other. The following example uses this method to multiply two UInt8 values that normally overflow when multiplied:

let x: UInt8 = 100
let y: UInt8 = 20
let result = x.multipliedFullWidth(by: y)
// result.high == 0b00000111
// result.low  == 0b11010000

The product of x and y is 2000, which is too large to represent in a UInt8 instance. The high and low properties of the result value represent 2000 when concatenated to form a double-width integer; that is, using result.high as the high byte and result.low as the low byte of a UInt16 instance.

let z = UInt16(result.high) << 8 | UInt16(result.low)
// z == 2000

Relationships

From Protocol