47はスルーですか?

四捨五入だとか切り捨てという考えで少数→整数変換すると
-0.99999〜0.99999まで0に変換されるから、0をまたいだところで
距離が狂うよ。

C言語でdoubleをintにキャストした場合や、intで除算をすると
少数部分が切り捨てられる。

これを防ぐために、整数化する際にはfloorを使うことが重要。
整数の除算も同様の措置が必要。(余りを見れば簡単)