print(0.1 + 0.1 + 0.1)
の実行結果が0.30000000000000004となってしまうのですがこちらはどうしてこのような結果となるのでしょうか?
また、改善策をご教授ください。
宜しくお願い致します
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
こちらはどうしてこのような結果となるのでしょうか?
デザインと歴史 FAQにも書いてあるとおり、Pythonに限った現象ではありません。
#####なんで浮動小数点数の計算はこんなに不正確なんですか?
ユーザーはよく次のような結果に驚きます:
>>> 1.2 - 1.0
0.19999999999999996
そしてこれが Python のバグだと考えます。が、これはバグではありません。この結果に Python はほとんど関与しておらず、むしろ基底のプラットフォームによる浮動小数点数の扱い方が関与しています。
[中略]
10 進数で簡単に書ける多くの数が、2 進浮動小数点数では正確に表すことができません。例えばこうすると:
>>> x = 1.2
x に保存された値は 10 進数の 1.2 の (とても高い精度の) 近似値であって、厳密な 1.2 ではありません。
改善策をご教授ください。
- できるだけ小数を扱わないようにする
- 10進有限小数を扱う際は、decimalモジュールの利用を検討する
- あるいはfractionsモジュールを使って、有理数として計算する
投稿2019/09/07 12:12
総合スコア35668
0
ベストアンサー
1/3 が十進表現で無限小数となるのと同じように、1/10は二進表現では無限小数となります。
浮動小数点データは、有限桁の二進数表現で表され、無限小数は有効桁数のところで四捨五入されて表現されるために、誤差が出ることになります。
解決方法は、10進数演算ライブラリdecimal
を使う。
もしくは、10倍して整数化して演算して、表示の時に小数点を挿入する。
投稿2019/09/07 12:10
総合スコア85882
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
投稿2019/09/08 01:46
総合スコア22324
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。