• ベストアンサー

さっきの小数点切捨て→浮動小数点数の演算誤差について

さっき、http://oshiete1.goo.ne.jp/kotaeru.php3?q=685942で切捨てがうまくできないっていう質問があって、私は計算機を出してまでなんでやろ~って思って計算して、回答しました。 ところがです、あっさりとそれは浮動小数点数の演算誤差ですっていう答えがすでに出ていたんです。(勉強になりました) うぅぅ~計算機まで出してきて計算した私ってなんてお馬鹿・・・トホホってそれはさておき ここからが質問なんですが、浮動小数点数の演算誤差っていうのはなんとなくは知っていたのですが(本で読んだことはある程度で、もちろん人に説明できるレベルではありませんが)そういうのってどんな場合にでるのでしょう。 さっきの質問の確認のため、Excel2002でオプションの計算のしかたなども変えてみてやったのですが、一度もそういう計算結果はでなかったのですよ。 でも、質問されている方がいるということはそういう計算結果もでるっていうことですよね。なので、どういう場合にそういう結果がでるのかと気になって。 さっきの質問の所に書き込もうかとも思ったのですが、他の方の質問にさらに質問するっていうのは失礼なような気もして、新しく質問しました。 先ほど答えていらっしゃった方でも、他の方でそういうことに詳しい方でもお時間あれば教えていただけないでしょうか。

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

  • ベストアンサー
回答No.1

Excel(というよりコンピュータの)演算誤差については以下のURLの解説がわかりやすいです。

参考URL:
http://pc21.nikkeibp.co.jp/pc21/special/gosa/index.shtml
poosann
質問者

お礼

早速の回答ありがとうございます。 教えていただいたサイトはかなり詳しく書いてあるようでじっくり読んでみたいと思います。 最近ここを利用するようになって、質問にすぐ答えてもらえることもさることながら、こういう自分の知らなかった役立つサイトを教えてもらえることもすごく有益です。 また、よろしくお願いします。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

「浮動小数点 誤差」または「浮動少数点 誤差」でWEB照会すると沢山出てきます。 http://support.microsoft.com/default.aspx?scid=%2Fisapi%2Fgomscom.asp%3Ftarget%3D%2Fjapan%2Fsupport%2Fkb%2Farticles%2Fjp402%2F5%2F54.asp&LN=JA http://support.microsoft.com/default.aspx?scid=http%3A//www.microsoft.com/JAPAN/support/kb/articles/JP409/7/44.asp http://www.twcu.ac.jp/~nabe/lec/CompB/CompB_s24.html#doc1_2455 ほか出てきます。コンピュターで数値解析をする時の大問題なんですが、経理や人事などビジネスではあまり考えなくても済む面があります。整数や固定小数点数を考えることが多いですから。

poosann
質問者

お礼

回答ありがとうございます。 私も普段そんなこと全然考えていませんでした。数値解析なんて大それたことしませんし。(笑) ただ、質問を読んでいただいてお分かりいただけてると思いますが、他の方の質問から一人で盛り上がってしまいました。 教えていただいたサイトをじっくり見て勉強したいと思います。

関連するQ&A

  • 浮動小数点の計算について

    Javaで0.1+0.2を計算すると0.30000000000000004になったり、10.0-9.9を計算すると、0.09999999999999964になったりするのはなぜですか? 参考書では。 「浮動小数点数を使った計算では、一見正確な値が計算されてるように見えてもほとんど場合内部では少しだけ誤差を含んだ値を持ってると、考えた方がいいでしょう。どのような計算を行った時にどの程度の誤差が出るのかは難しい話題になるのでこの本では詳しく説明しませんが、例えば100.0-99.99のように同じぐらいの数同士で引き算を行うと誤差が現れやすくなります。」 と書いてありました。 この本ではこれだけで説明が終わりました。 なぜ浮動小数点で計算を行うと誤差が出るのか詳しく教えていただけると助かります。

    • ベストアンサー
    • Java
  • 浮動小数点演算と固定小数点演算の使い分けについて

    解説書などには、「浮動小数点は3.14E0の形」や「固定小数点は3.14」などと説明されています。 では、例えば、ごく一般的な32ビットマシンで「3.14 * 45.6」という命令を書いたときに演算されるのは浮動小数点演算なのか、固定小数点演算なのかがわかりません。例えばIntelのx86CPUは、内部にFPUを持っているそうですが、この場合は「3.14 * 45.6」は、内部では必ず浮動小数点演算になっているということなのでしょうか? 「3.14 * 45.6」を「3.14E0 * 4.56E1」と書いた場合にしか浮動小数点演算されないということではないと思っているのですが、実際の浮動小数点演算と固定小数点演算の内部的な切り替えがわかりません。 理解が足りなくて、おかしな質問になっていましたら、その点もご指摘いただければうれしいです。

  • 浮動小数点数の誤差範囲を教えてください

    猿より若干頭がいい、冴えないプログラマです。 面積を計算する際は必ず誤差がないように、doubleを使わずcurrencyを使っています。 メートルなら小数点4桁で足りますが、キロメートルとなると通貨型の4桁数では足りません。 doubleを使っても、平方キロを平方センチに変換して集計しても誤差は出ないでしょうか。 実際浮動小数点数はどの程度の誤差を生むのでしょうか。猿でも分かる程度教えてください。 基礎過ぎて動物園に帰れのような批判は勘弁してください。。。

  • エクセル浮動小数点演算誤差?が見えない

    エクセル2010です。 BOOK-AのシートBのE7セルに0.822という数値が入っています。 見た目も、数式バー上も0.822です。 BOOK-BのシートCのE7セルにも0.822という数値が入っています。 見た目も、数式バー上も0.822です。 ところがこれを =[B.xlsm]Sheet1!E7=E7 で比較すると、falseが返ります。 これまで浮動小数点演算誤差で、見た目がおなじでも小数点以下かなり下の方で違いケースは経験していましたが、その場合でも小数点以下の表示を20位くらいまで表示させると違いが表れました。ところが今回は小数点以下30位まで表示させても0.822000000000000000000000000000で誤差が見えません。でもfalseになります。 こんなことってあるんでしょうか?

  • IEEE754と浮動小数点定数同士の演算について

    ■質問 浮動小数点の標準規格IEEE754に、浮動小数点定数同士の演算に関する規定はありますか? ■背景 とあるマイコンで組込みソフト開発をしています。 このマイコン用のコンパイラ(IEEEに準拠)で以下のCソースコードをコンパイルしたところ、コンパイラのバージョン1とバージョン2で演算結果が異なりました。 double d_val = 6.6f * 10.0f; ○コンパイルバージョン1でコンパイルしたソフトの演算結果 →d_valには66.0が代入されました。 ○コンパイルバージョン2でコンパイルしたソフトの演算結果 →d_valには65.999999…(詳細は失念)が代入されました。 コンパイラメーカーに問い合わせたところ、「バージョン1から2へのアップグレードにおいて、浮動小数点定数演算に関連する変更を行ったが、その影響は浮動小数点演算における誤差の範囲内である」との回答でした。 誤差の範囲内であるとはいえ、コンパイラのバージョン違いで演算結果が異なるのは困るので、これがIEEE754規格違反なのであれば、それを根拠にコンパイラメーカーへ対応を求められるのではないかと考えています。 しかし、浮動小数点定数同士の演算結果の正確性についての規定がないのであれば、開発側で対応するしかありません。 いろいろと調べてはいるのですが、これといった情報に行き当たっていないので、こちらで質問させていただきます。どうぞよろしくお願いいたします。

  • 浮動小数点数の誤差

    恐ろしく基本的なこと聞きます。 Public Class himajin100000 Shared Sub Main Dim foo As Double = 0.5 '2進数で表現できる Dim bar As Double = 0.1 '割り切れないから誤差が出る System.Diagnostics.Trace.WriteLine((foo - bar).ToString) '0.4 '・・・あれ?浮動小数点数の誤差どこ行った? End Sub End Class

  • 浮動小数演算は実行環境の変化に応じて異なる結果に?

    プログラム(C++)について質問があります. 浮動小数演算を用いると,実行環境の変化に応じて結果が変わってしまうのでしょうか? プログラム中ではdouble演算を頻繁に用いています. (ソースコードは膨大すぎるため,申し訳ありませんが載せることが出来ません.) 小数演算をするために何気なくdouble(もしくはfloat)を使っていました. しかし,コンパイル後の実行ファイルを実行する環境に応じて結果が変わってしまうのでは・・・と思い始めました. そこで,ご質問なのですが, ・浮動小数を扱うと,実行環境(プロセッサ?)に応じて,結果は変わってしまいますか? また,もし誤差が生じてしまうならば,何か対処する方法はありますでしょうか? (整数演算にしろ!・・・と言うのは無しにさせて頂きます.) 初歩的な質問だと思いますが,宜しくお願い致します.

  • 安価に、高速な浮動小数点演算をするためのハードウェアについて

    安価に、高速な浮動小数点演算をするためには、どんなハードウェアがあるでしょうか、またはこれらの情報をまとめているサイトなどがありましたら、教えていただけないでしょうか。 具体的には、現在入手できる浮動小数点演算の得意なICの一覧などが得られるとうれしいです。 現在のところ、計算対象を限っていませんが、最終的な目標として行列計算などが高速に出来たらと考えています。

  • β進n桁の浮動小数点

    2進3桁、ML(絶対値最大の浮動小数点数)=1 MU(絶対値最小の浮動小数点数)=2の浮動小数点数の 体系で表現できる数は全部でいくつか、すべて挙げよ。 また、計算機イプシロンを求めよ。 ・・・っという問題がわからなくて困っています。 どなたか、解法手順またはアドバイスをよろしくお願いします。

  • AthronX2 5200とCore2DuoE6600で浮動小数点の演算が速いのはどっち?

    AthronX2 5200とCore2DuoE6600で浮動小数点の演算が速いのはどちらなのでしょうか?ベンチマークでいろいろ異なる結果が出て困っています。HD BENCHではCore2DuoE6600がAthronx2 4200に負けてしまいました。CUBASE(DAW)を使用しているので浮動小数点演算が速くないと困るのです。本当にAthronX2 5200とCore2DuoE6600で浮動小数点の演算が速いのはどちらなのでしょうか?Core2DUOの浮動小数点演算の能力が低ければ買い替えを検討しています。多角的な側面からアドバイス願います。

専門家に質問してみよう