LoginSignup
12
6

More than 5 years have passed since last update.

SwiftにFloat系の余り演算メソッドが2つある理由

Last updated at Posted at 2016-12-03

前回、SwiftのFloat系の余りの%演算子が廃止になり、その代わりに2つのメソッドを使うようになったという記事を書きました。
Float系の演算で余り演算子(%)が廃止、それに変わるメソッドはだるま落としと最寄駅

しかし、整数の方は引き続き%演算子があり、2つのメソッドも使えないのでそれがなぜかという疑問を書いたところ、以下のメール(?)の紹介を受けました(Dさん、ありがとうございました)。
https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20160411/014983.html

メールに書いてある内容

たとえば10.0を0.1で割ったときの余りを考えます。
FloatGaiyou.png
数式の上では余りは0ですが、2進数では0.1が正確に表現できないため、これは0.1より少し大きい値になります。
Float_0_1_Kakudai.png
そのズレが蓄積して10.0のところもズレてしまいます。
10_0Kakudai.png
ここから普通に余り(10.0と同じまたは低いところまでの距離)を求めると下の図のような9.9に近いポイントとの距離が余りになってしまいます。
9_9_and_Amari.png
この現象を避ける(被害を軽減する)ために、最寄り駅方式のメソッドがあるそうです。
Float_Moyorieki.png

12
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
6