
pythonの乗算の表示結果の差について教えてください。
pythonの対話モードで下記に示す乗算を行いました。
同じ計算をしているにもかかわらず、結果が異なる理由を教えてください。
参考書によると上の計算表示結果は最大精度で表示しているから、下の計算結果表示は人間が見るための精度で表示しておりバグではない。と、書いていました。最大精度で表示(6.2830000000000000なら理解ができます)しているにもかかわらず、計算結果が違うことがなぜバグではないのか理解ができません。
教えてください。
※上の結果がおかしい理由は2進数の計算の問題だとは思いますが・・・
------------------------------------------
>>> 3.1415 * 2
6.2830000000000004
>>> print 3.1415 * 2
6.283
------------------------------------------
No.2ベストアンサー
- 回答日時:
> >>> 3.1415
> 3.1415000000000002
> 回答ありがとうございます。しかし、↑この時点で納得ができないのですが・・・
これは、
1) ユーザーは 3.1415 というのを「文字列」で入力しています。
、
2) それを内部表現(2が基数の浮動小数点数)に変換します。
しかしこのとき 3.1415 を正確に表現できないので「丸め」がおきます。
このため、Pythonにとっては 3.1415000000000002 のようになってしまうのです。
3) 内部表現を再度「文字列」に変換して出力するのですが、
上記の説明のとおり、入力時に数値が「丸められて」いるので
出力もそれにしたがってしまっているわけです。
入力がたとえば 3.125 とかなら内部表現に変換するときに正確に
行えるので、このようなことはおきません。
といった説明でいかがでしょうか?
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進数の計算の問題だとは思いますが・・・
ということです。
>>> 3.1415
3.1415000000000002
回答ありがとうございます。しかし、↑この時点で納得ができないのですが・・・
なんで、値が勝手に書き換えられてしまうのか、よくわかりません???
すみません。細かくて
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Chrome(クローム) Chromeの描画領域を2分割して異なるスクロール位置を同時に表示させることはできますか 1 2023/03/01 16:53
- Excel(エクセル) エクセルのSUM関数について 4 2023/04/18 10:37
- 数学 WolfarmAlpha計算機 計算結果がおかしい 2 2022/07/02 15:42
- Excel(エクセル) 文字列を数式として変換する事はできますか? 6 2022/06/23 10:38
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- Excel(エクセル) イミディエイトウインドウでのべき乗の計算 エクセル VBA 4 2022/04/11 15:03
- 情報処理技術者・Microsoft認定資格 応用情報処理技術者試験のシステム利用率の計算について 2 2022/03/28 07:43
- その他(Microsoft Office) Excelで時間計算(負) 8 2023/02/26 05:47
- 会計ソフト・業務用ソフト エクセルについて 1 2022/06/15 17:39
- Excel(エクセル) エクセルでIF関数中にIFERROR関数を使いたいのですが???? 5 2022/04/08 13:24
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
有効数字について 以前質問をし...
-
VB.net Double と...
-
16進数 加算 減算 C言語
-
三菱シーケンサ(Aシリーズ)で...
-
ExcelでPC(パソコン)によって...
-
c languageで 簡単な質問があ...
-
C言語 型変換のタイミング
-
符号誤り率の計算は例題でどの...
-
MATLABでの行列の全要素の和
-
floatの有効桁数
-
VB6.0での小数点の扱いについて
-
除算を使わずに10で割りたい。
-
Double型について
-
2進数の足し算(C言語)
-
PICで小数点の演算
-
【C言語】RGBと輝度の計算に関して
-
CRCの計算方法について
-
EXCELの関数"STDEV(標準偏差)"...
-
O(n log n)について2
-
変換指定子%22-16gの表示...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelでPC(パソコン)によって...
-
O(n log n)について2
-
有効数字について 以前質問をし...
-
c languageで 簡単な質問があ...
-
ExcelのINT関数の計算結果がお...
-
EXCELの関数"STDEV(標準偏差)"...
-
三菱シーケンサ(Aシリーズ)で...
-
VB.net Double と...
-
計算の丸め誤差の解消について
-
除算を使わずに10で割りたい。
-
2進数の足し算(C言語)
-
16進数 加算 減算 C言語
-
”/”を使わずに割り算したいんで...
-
CRCの計算方法について
-
VB6.0での小数点の扱いについて
-
VBAでミリ秒まで出力する方法
-
時刻の比較
-
2進数データのビット演算
-
教えて小数点の比較!(C言語)
-
C言語 型変換のタイミング
おすすめ情報