AnDeriensのブログ

個人的なブログです

Pythonの浮動小数点は誤差を含む

AtCoder ARC107でつまづいたので、復習note。

桁が大きい計算で除算を使うと浮動小数の誤差が現れる。 なので、桁が大きいときは、切り捨て除算を使う。

# 桁が大きい計算で除算をすると誤差が出る

n = 987654321

# 987654321
print(n)
# 487730529388812672 (間違い)
print(int((n * (n + 1)) / 2))
# 487730529388812681 
print(n * (n + 1) // 2)

## そもそもfloat型自体が誤差を含んでいる

# 0.1
print(0.1)

# 0.10000000000000000555 小数点以下18桁で誤差が登場する
print(format(0.1, '.20f'))

入門 Python 3

入門 Python 3

  • 作者:Bill Lubanovic
  • 発売日: 2015/12/01
  • メディア: 単行本(ソフトカバー)