これはなに
Swift のゼロ除算は型によって結果が異なることを知ったので共有させていただきます。
環境: Xcode 7 GM seed (Swift2.0), Playground
ゼロ除算
以下の型で試しました。
- Int
- 変数
- 直接
- Float
- 変数
- Double
- 変数
- 直接
0.0
とか直接書くとデフォルトで Double
になるので Float
の直接はやりませんでした。
結果
- Int
- 変数:実行時エラー
Execution was interrupted, reason: EXC_BAD_INSTRUCTION(code=EXC_I386_INVOP, subcode=0x0).
- 直接
1000/0
: 実行時エラーDivision by zero
- 変数:実行時エラー
- Float
- 割られる数によって結果が異なる、変数でも直接でも結果は同じ
- Double
- 割られる数によって結果が異なる、変数でも直接でも結果は同じ
Float, Double の計算結果
割られる数が 0 か 正 か 負 かで結果が変わります。
0.0 / 0.0 = NaN
1000.0 / 0.0 = ∞
-
-1000.0 / 0.0 = -∞
まとめ
-
Float
,Double
の場合は実行時エラーにならないので注意 - Intの場合は変数で計算するのと直接計算するのでは計算結果、エラーが異なる
オーバーフロー演算子
ちなみに Swift にはオーバーフロー演算子という、オーバーフローしてもエラーにならない演算子というのがあります。
&+
, &-
, &*
の三種類があります。
除算 &/
と余剰 &%
も昔はありましたが、なくなりました。