プロが教えるわが家の防犯対策術!

浮動小数点の計算に関してですが、IEEE標準形式とエクセス64形式というものがありますが、どういう時にどう使って計算するべきなのか分かりません。
参考書を読むと「なるほど、基数に足すんだな」などと何となく思うのですが、どういう問題が出たときにどちらをどう使うべきなのか、どういう問題が出た時には使ったらいけないのか・・・さっぱりです。
2つの使い方と使い時について説明していただけないでしょうか?

A 回答 (3件)

問題を解くときは、問題文で表示形式が指定されている場合、その表示形式


として解き、指定されていなければ、一応IEEE754で解きます。

実務の場合。
どちら(それ以外の場合もありうる)を使っているかは、ハードウェア次第、言語次第で、選ぶことはできません
EWSやパソコンはIEEE754仕様(浮動小数点演算装置の仕様がこうなっている)であり、
IBMの大型コンピュータの仕様はエクセス64形式
(ということは、日立、富士通などの大型コンピュータはIBM互換仕様だったのでエクセス64。)
※最近はどうなのかは、わかりません。

なお、IEEE754とエクセス64形式での計算結果は「一致しません。」
たとえば、単精度実数の場合、
IEEE754:最大で、10^38まで表示可能。
エクセス64:最大で、10^72まで表示可能。
ですので、たとえば、fortranで
      x=1.0E50   (1.0×10^50)
とか書いたら、IEEE754ではオーバーフローでアウト。

また、IEEE754では、表示形式以外にも計算結果の精度も規定されているので、
CPUが違っても計算結果は変わらない(ただし、四則演算と√までなのと、数値の丸め方法をあわせるという条件で。)
けど、エクセス64(というより、IEEE754以前のコンピュータ)は
計算結果の精度については結構イイカゲンで、
   X1=Y/5.0   と、
   READ (5,*) Z Zにファイルから5を読み込んだとします。
   X2=Y/Z
   ※変数は全て単精度(FORTRANの暗黙宣言どおり)です。
X1とX2は、最後の1ビットに至るまで同じ(同一コンピュータ、同一言語で。)であるはず、
なんだけど、そうならない。微妙に結果がズレます。
ということは、こういうズレを前提としてプログラムを組まないと
意図するとおり動かなかったのです。
一般論で書くと、(いや、上記は、一般論よりとんでもないのだけど...)
・整数で 整数÷整数 が割り切れても 、実数ではそうならない
 したがって、実数の値を比べるときイコールで判定してはならない。
 ある程度の幅を持たして比較しないとならない。
 
 ※IEEE754やMicrosoftBasicの旧版は、大きい整数は別として、こんな現象は起きない(いや、めったに起きないだけかも)
  ので、(単純な四則演算の結果の比較なら)こういうことにシビアでなくてもいい
  けど、昔はそうではなかったのです。
ですので、エクセス64で科学技術計算プログラムを組むのは、
IEEE754で組むのより疲れます。

エクセス64で組んだプログラムをIEEE754に変換するのは
使える数値の範囲にさえ気をつけていれば、まあ大丈夫の可能性が高いけど、
IEEE754で組んだプログラムをエクセス64に変換するると、
思ってもみなかったところでエラーが多量に生じます。
今となっては、こんなことやる必要自体、まず生じないと思いますが.....
    • good
    • 0
この回答へのお礼

なるほど、普段はIEEE754を使う事を心がければ良いのですね…。
使いどころの違いが分からず悩んでおりました。
丁寧な解説ありがとうございます。

お礼日時:2008/06/22 13:46

基本的には計算機のハードウェアがどちらの形式をサポートしているかという問題でしょう。

浮動小数点フォーマットは昔は計算機ごとに色々とありましたが、IEEE標準規格ができてほとんどはそれに従っています。エクセス64形式は歴史的経緯で残っているだけと思いますけど。
普通はIEEE標準形式を使えば良いかと思いますが、そもそも浮動小数点フォーマットを意識しなければいけない問題ってそうそうないと思いますけど。
    • good
    • 0
この回答へのお礼

なるほど……。
ありがとうございます。

お礼日時:2008/06/22 13:46

要は「同じものの違う表現」なので, どっちを使っても本質的に同じです.


10進数と 16進数で「どういう問題がでたときにどちらをどう使うべきなのか」を考えてみてください. あんまり意味ないでしょ?
    • good
    • 0
この回答へのお礼

確かに・・・。

お礼日時:2008/06/22 16:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!