- ベストアンサー
プログラミングの数値入力についてです
数値計算の誤差について考察してるのですが、桁を%16.8fで情報落ちなどの計算をしていたところ、数値として a=1.001 と入力したところ、出力では a=1.00100005 と出ました。 なぜ5が出てきたのかがわかりません。 試しに100000倍してみたところ 100100.00467300 と出ました。 なぜこのような適当な数字が桁の下のほうに出てくるのでしょうか プログラミングはまだ始めて間もないので回答よろしくお願いします
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
それは丸め誤差というもので、浮動小数点型を使っている限りは不回避なものです。詳細は「丸め誤差」でググってみてください。 簡単に言えば、浮動小数点型は整数型に比べて広い範囲の数値を表現しているため、使えるビット数ではどうしても表現できない値が存在します。これが計算時に誤差となって現れるのが丸め誤差です。 昔から良く引き合いに出されるのは「浮動小数点型で、1/10000*10000の結果が1ぴったりになると思うな」と言うことです。これが問題になる用途では固定小数点型を使うか、整数として計算してから後で小数に変換する、ということをします。 浮動小数点はANSIで規格化された方法があるんですが、処理系によって違う方法を使っている場合もあり得る(=丸め誤差の出方が変わる)ので、小数を扱う場合は注意が必要です。
その他の回答 (2)
- NaKIT
- ベストアンサー率62% (15/24)
お使いのC言語における実数の内部表現である浮動小数点数について学び, なぜ内部で精度が落ちるのかを検証してください。 http://ja.wikipedia.org/wiki/浮動小数点数 の「浮動小数点数の精度」にしたがい, 1.001 が,お使いの言語内部ではどうなっちゃてるかを確かめてください。 もしもプログラムで a を float で宣言しているなら, double ではどうなるかを確認してください。
プログラム何で組んだか知りませんが、Excel Vbaなら起こり得ると思います。 数字の繰り上げが、ほかのソフトと違う処理されているのか、ソフトによって小数点以下の処理の仕方が違います。 それを治そうと思えば、小数点以下の何処で四捨五入するのかもしっかり組まないとそうなる可能性があります。
お礼
回答ありがとうございます プログラミングはLinuxでc言語を使いました。 処理の仕方、とありますが処理のときに適当な数字が出てくる原因は何でしょうか?