前回、SwiftのFloat系の余りの%演算子が廃止になり、その代わりに2つのメソッドを使うようになったという記事を書きました。
Float系の演算で余り演算子(%)が廃止、それに変わるメソッドはだるま落としと最寄駅
しかし、整数の方は引き続き%演算子があり、2つのメソッドも使えないのでそれがなぜかという疑問を書いたところ、以下のメール(?)の紹介を受けました(Dさん、ありがとうございました)。
https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20160411/014983.html
#メールに書いてある内容
たとえば10.0を0.1で割ったときの余りを考えます。
数式の上では余りは0ですが、2進数では0.1が正確に表現できないため、これは0.1より少し大きい値になります。
そのズレが蓄積して10.0のところもズレてしまいます。
ここから普通に余り(10.0と同じまたは低いところまでの距離)を求めると下の図のような9.9に近いポイントとの距離が余りになってしまいます。
この現象を避ける(被害を軽減する)ために、最寄り駅方式のメソッドがあるそうです。