* 【Python】floatの闇
Aug 25 2014
AOJの問題を解いてたら絶対に合ってるのに通らない問題があった。
正解者のコードを見ていろいろggってるとどうやらPythonのfloatの仕様にしてやられたらしい。
詳しくまとめてあるサイトがあるので難しい話はそちらでどぞ
Python で正確な小数の計算 (3) – float, Decimal の有効桁数
まぁ具体的に何が起きたのかというと、例えばインタラクティブシェルで以下のコードを実行する。
“1 / 3"は無限小数なので省略されてこう表記されてるのだろう。
しかし、ここでこんなことしてみる。
print('%.f100' % (1 / 3))
‘1 / 3'の結果を小数点以下100桁までprintしろって意味。
するとこうなってる。
完全に闇wwww
この仕様のせいで、’== 0'がいつまでたっても通らなくて詰んだ。
int型は大丈夫なんだけど、floatだとこうなることがある。
ので、floatに対して’== 0'を実現したかったらこう書けば良い。
hoge < 1.e-10
こうすると、下11桁以降を無視して判定してくれる。
以上!
※この記事は WordPress に投稿した記事を変換したものです。一部不自然な表示があるかも知れません。ご了承ください。また、記事タイトル先頭の * は WordPress から移行した記事である印です。