• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:pythonの乗算の表示結果の差について教えてください)

pythonの乗算の表示結果の差について教えてください

このQ&Aのポイント
  • pythonの乗算を行った結果、異なる結果が出る理由について質問しています。
  • 参考書では、上の計算結果は最大精度で表示しているが、下の計算結果は人間が見るための精度で表示していると説明されています。
  • 質問者は、最大精度で表示しているにもかかわらず、結果が違うことに疑問を持っており、なぜバグではないのか理解できないと述べています。

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

> >>> 3.1415 > 3.1415000000000002 > 回答ありがとうございます。しかし、↑この時点で納得ができないのですが・・・ これは、 1) ユーザーは 3.1415 というのを「文字列」で入力しています。 、 2) それを内部表現(2が基数の浮動小数点数)に変換します。 しかしこのとき 3.1415 を正確に表現できないので「丸め」がおきます。 このため、Pythonにとっては 3.1415000000000002 のようになってしまうのです。 3) 内部表現を再度「文字列」に変換して出力するのですが、 上記の説明のとおり、入力時に数値が「丸められて」いるので 出力もそれにしたがってしまっているわけです。 入力がたとえば 3.125 とかなら内部表現に変換するときに正確に 行えるので、このようなことはおきません。 といった説明でいかがでしょうか?

aakkiirraajp
質問者

お礼

納得しました。 ありがとうございました。 バグではなく仕様で、さらに人間がわかるように丸め誤差で表示しているということですね。

その他の回答 (1)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

print 3.1415*2 としたときは、表示のときに下位の桁が省略されているだけで、 内部的な値は 3.1415*2 とだけやったときと同じです。 ですからバグでないというように書いてあるのでしょう。 >>> 3.1415 3.1415000000000002 >>> 3.1415 * 2 6.2830000000000004 >>> x = 3.1415 * 2 >>> x 6.2830000000000004 >>> print x 6.283 >>> print "%20.16f" % x 6.2830000000000004 >>> 3.1415 と入力したのに 3.1415000000000002 が出力されているとか 3.1415 * 2 が 6.2830 ではなく 6.2830000000000004 となっているのは >※上の結果がおかしい理由は2進数の計算の問題だとは思いますが・・・ ということです。

aakkiirraajp
質問者

お礼

>>> 3.1415 3.1415000000000002 回答ありがとうございます。しかし、↑この時点で納得ができないのですが・・・ なんで、値が勝手に書き換えられてしまうのか、よくわかりません??? すみません。細かくて

関連するQ&A

専門家に質問してみよう