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: Int64) -> (high: Int64, low: UInt64)

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. この値と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 Int8 values that normally overflow when multiplied: このメソッドを使うことで、そうしなければオーバーフローするであろう積の完全な結果を計算してください。従来的な切り詰め乗算と違って、multipliedFullWidth(by:)メソッドは、この値とotherの積のhighおよびlow部分の両方を含んでいるタプルを返します。以下の例は、このメソッドを使って、通常は乗算した時オーバーフローする2つのInt8値を乗算します:


let x: Int8 = 48
let y: Int8 = -40
let result = x.multipliedFullWidth(by: y)
// result.high == -8
// result.low  == 128

The product of x and y is -1920, which is too large to represent in an Int8 instance. The high and low compnents of the result value represent -1920 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 an Int16 instance. xyの積は-1920です、それはInt8インスタンスにおいて表すには大きすぎます。result値のhighlow構成要素は、2倍幅整数に成形するために連結される場合-1920を表します;すなわち、result.highを高バイトとしてresult.lowを低バイトとしてInt16インスタンスに使って。


let z = Int16(result.high) << 8 | Int16(result.low)
// z == -1920