重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

pythonの乗算の表示結果の差について教えてください。
pythonの対話モードで下記に示す乗算を行いました。
同じ計算をしているにもかかわらず、結果が異なる理由を教えてください。

参考書によると上の計算表示結果は最大精度で表示しているから、下の計算結果表示は人間が見るための精度で表示しておりバグではない。と、書いていました。最大精度で表示(6.2830000000000000なら理解ができます)しているにもかかわらず、計算結果が違うことがなぜバグではないのか理解ができません。

教えてください。
※上の結果がおかしい理由は2進数の計算の問題だとは思いますが・・・

------------------------------------------
>>> 3.1415 * 2
6.2830000000000004
>>> print 3.1415 * 2
6.283
------------------------------------------

A 回答 (2件)

> >>> 3.1415


> 3.1415000000000002

> 回答ありがとうございます。しかし、↑この時点で納得ができないのですが・・・

これは、
1) ユーザーは 3.1415 というのを「文字列」で入力しています。

2) それを内部表現(2が基数の浮動小数点数)に変換します。
しかしこのとき 3.1415 を正確に表現できないので「丸め」がおきます。
このため、Pythonにとっては 3.1415000000000002 のようになってしまうのです。

3) 内部表現を再度「文字列」に変換して出力するのですが、
上記の説明のとおり、入力時に数値が「丸められて」いるので
出力もそれにしたがってしまっているわけです。

入力がたとえば 3.125 とかなら内部表現に変換するときに正確に
行えるので、このようなことはおきません。

といった説明でいかがでしょうか?
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/11/30 23:27

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進数の計算の問題だとは思いますが・・・

ということです。
    • good
    • 0
この回答へのお礼

>>> 3.1415
3.1415000000000002


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

お礼日時:2009/11/09 00:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!