* 【Python】floatの闇

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 から移行した記事である印です。

comments powered by Disqus