• ベストアンサー

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

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

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

  • ベストアンサー
  • ninoue
  • ベストアンサー率52% (1288/2437)
回答No.3

ネット上には色々な情報について詳しい解説や、分り易い説明のサイトが数多くあります。 質問された内容については、例えば次のようにサーチ条件を工夫してサーチして下さい。 倍精度浮動小数点 定義 精度 計算誤差 倍精度浮動小数点 解説 計算誤差 倍精度浮動小数点 解説 計算誤差 わかりやすい ==> (1) 日経PC21 / 演算誤差の正体 - IEEE 754 浮動小数点数の仕組み http://pc.nikkeibp.co.jp/pc21/special/gosa/eg4.shtml ==> (2) http://pc.nikkeibp.co.jp/pc21/special/gosa/ ◆“達人”芳坂和行氏に学ぶ、エクセル「演算誤差」対策講座 (1)の中にexcelの通貨型:currencyの計算のやり方、倍精度浮動小数点の表し方、計算精度や計算誤差などが分り易く説明されています。 "単精度と倍精度では表現できる桁数や大きさが違うわけですね" と言う言葉で(1)の中をサーチしてみて下さい。 10進17桁相当の桁数の精度があります。 地球表面の広さは、一周4万KMをcm単位で表示しても次の通りまだ7桁程余裕があります。 4*10**4(km)*1000(m)*100(cm)=4*10**9 さすがに地球表面積を平方cm単位で表そうとすると1.6*10**19(cm**2) のオーダーとなるので少し精度不足です。 平方m単位では 1.6*10**15(m**2) ですから精度的には十分です。 あなたの考えられている計算数値の一番厳しい条件の幾つかを例題として用意して、excelでcurrencyの場合、通常の場合(特に指定しなければ倍精度で計算される筈)を用意して試してみてください。 その場合、結果が分り易い数を使って下さい。 例えば、100000000999など なお小数点付きの数では10進形式から計算機内部の倍精度形式に変換する時に変換誤差が出ますが、多分10進12桁程度の精度で十分な通常の場合は問題になりません。

その他の回答 (2)

  • yorozu_ya
  • ベストアンサー率54% (76/140)
回答No.2

掛け算だけでしたらそんなに心配することはありません。 元の数の小数点以下の桁数が判っているなら、結果の小数点以下の桁数もわかるはず。 その範囲で丸めれば基本的には誤差は出ません。 ※もちろん有効桁数の範囲内での話です。

noname#146604
noname#146604
回答No.1

オーバーフロー/アンダーフロー 演算結果が指数部で表現できる範囲を超える場合があるが、最大値を超えた場合はオーバーフロー、絶対値の最小より小さい場合はアンダーフローという。IEEE 754の場合、アンダーフローは、まず結果が非正規化数となり精度が低下し、さらに進むと結果が0になる。 桁落ち 絶対値がほぼ等しい異符号の数値同士の加算後や、同符号でほぼ等しい数値同士の減算の後、正規化で有効数字が減少すること。詳細は桁落ちを参照。 情報落ち 浮動小数点数値を加減算するとき、指数を揃えなければならない。指数は絶対値の大きい方に揃えるが、このときに絶対値の非常に小さな値と絶対値の非常に大きな値との加減算を行うと、絶対値の大きな値の指数に揃えなければならないため、絶対値の小さな値は仮数部が大きく右シフトされ、仮数部の表現範囲からあふれて情報が欠落してしまう。情報欠落ともいう。詳細は情報落ちを参照。 積み残し 情報落ちが繰り返し起こる場合を言う。たとえば を n=0 の初項から計算しようとすると、ある項から情報落ちが起こり、それ以降の項が無視されてしまうことになる。これを積み残しと呼び、値の小さな項から加算をすることで対処する。 丸め誤差 仮数部の桁数が有限であるため、収まらない部分の最上位桁で四捨五入(2進法では0捨1入)して仮数部の桁数に丸めることによる誤差。