#この記事、何?
一言だけ投稿しようかと思って書いてみた。
一言でいうと、割り算の整数解が欲しければ「//」か「divmod」を使おうという話。
#事例
数を100で割って整数を得る。
##修正前のコード
result = int(value / 100)
まあ、たいていの場合はこれで動く。
ただ、おっきい数でNG。
##NGの事例
>>> 38030123828366199/100
380301238283662.0
ね?わかりやすい。
##修正後のコード
result = value // 100
##OKの事例
>>> 38030123828366199 // 100
380301238283661
で、境目が見てみたくなった。
>>> 38030123828366199/100
380301238283662.0
>>> 38030123828366198/100
380301238283662.0
>>> 38030123828366197/100
380301238283662.0
>>> 38030123828366196/100
380301238283661.94
>>> 38030123828366195/100
380301238283661.94
>>> 38030123828366194/100
380301238283661.94
>>> 38030123828366193/100
380301238283661.94
>>> 38030123828366192/100
380301238283661.94
>>> 38030123828366191/100
380301238283661.94
>>> 38030123828366190/100
380301238283661.9
>>> 38030123828366189/100
380301238283661.9
なるほど、わかりやすい。
末尾のビットの気分次第でとびとびの値をとってる。そりゃそうだ。
浮動小数の保持できる限界間際の数が偶数ばかりになるというのと同じですね。
計算精度をちゃんと意識しましょう。。。