Pebble Coding

ソフトウェアエンジニアによるIT技術、数学の備忘録

swift Intのオーバーフロー演算について

swiftは整数のオーバーフローに関して厳しめの仕様になっている。

Double, Floatには最大値はほぼない。
Double, Floatは不動小数点表現なので、最大値はほぼないと考えて良い。オーバーフロー制御構文は用意されていない。

DoubleをIntに変換するときにオーバーフローさせたくない場合は、Int(exactly:)を使う。オーバーフローする時はnilが返される。
このイニシャライザは小数点以下を正確に表現できるかどうかなので、大きさがオーバーフローかどうかをみるには、
Int.maxと値を比較するのが適切である。

Intどうしの加算、乗算でオーバーフローを検知させたい時は以下のメソッドを使う。

func addingReportingOverflow(_ other: Int) -> (partialValue: Int, overflow: Bool)
func multipliedReportingOverflow(by other: Int) -> (partialValue: Int, overflow: Bool)