Article View: fj.lang.c
Article #508Re: 浮動小数点計算の規則
From: Katsuhiko OHKUBO
Date: Fri, 20 Mar 1998 00:00
Date: Fri, 20 Mar 1998 00:00
52 lines
3057 bytes
3057 bytes
In article <6er7u0$4oi$1@news-o.cc.titech.ac.jp> ytakeshi@o.cc.titech.ac.jp (Takeshi Yanagisawa) writes:
この __setfpucw は,実際の計算にどの程度の影響を与えるもの
なのでしょうか.ちょっと考えただけでも,
・この命令の結果計算結果の精度は(ない場合と比較して)低下したことに
なるのでしょうか?
仮数部の長さを64(デフォルト)、53、24ビットに変更できます。
当然、精度が落ちます(落ちました)。
もちろん、指定された精度のなかでは正確(末尾数ビットに誤差があるかも
知れないが、それは何ビットでやっても同じこと)です。
・計算速度が変化したりするのでしょうか?
Pentium ディベロッパーズマニュアルによれば、仮数部の長さによって、
演算のクロック数が減ることがあるそうです(今 手元にないので、正確な数値は
分かりません)。
それと, double 以外に long double などを同じプログラム内
で使っている場合は,変数の精度が変わる度に __setfpucw() を実行して
丸め精度を変更してやらないといけないんでしょうか?
マニュアルには、数値レジスタへのロードがdoubleでも、内部では
拡張倍精度(仮数部の長さがデフォルトのままなら)で演算され、
デスティネーションにストアする時にその形式に丸められるんだそうです(だから
「Pentiumはとても正確なのだ!」と書いてあった)。
厳密な数値計算をするのでなければ、必要ないんじゃないでしょうか。
# あったら、大変なことだ。
....
double one_third = 1.0/3.0;
if ((double) a / 3.0 != one_third) {
....
というちょっとは無難な感じ?の処理に置き換えるというのはどうなんで
しょうか...
double one_third... の前に、float a = 1.0; があるのですか?
このことに付いては、
David Goldberg. "What every computer scientist should know about
floating-point aritmetic." ACM Computing Surveys, Vol.23, No.1.
の第3節に解説があります。
拙い日本語訳でよろしければ、
http://urr-gw.casl.cs.uec.ac.jp/ohkubo-k/papers/
にあります。よろしければどうぞ。
Farnum, C. "Compiler support for floating-point computation."
Softw Pract. Experi. 18, 7, 701--709.
も役立ちそうです。
----------
大久保克彦 ohkubo-k@casl.cs.uec.ac.jp
Technical Details
Message-ID:
<OHKUBO-K.98Mar20151708@urr-gw.casl.cs.uec.ac.jp>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailReferences:
<6d0rv1$3e3$1@postman.riken.go.jp> <6er7u0$4oi$1@news-o.cc.titech.ac.jp>Show Full Headers
Complete Article Headers
X-Google-Language: Japanese,JIS X-Google-Thread: 10684a,a009a4f1ca0d9d33 X-Google-Attributes: gid10684a,public X-Google-Thread: 106434,1ab637b5ab9bbcc5 X-Google-Attributes: gid106434,public From: ohkubo-k@urr-gw.casl.cs.uec.ac.jp (Katsuhiko OHKUBO) Subject: Re: 浮動小数点計算の規則 Date: 1998/03/20 Message-ID: <OHKUBO-K.98Mar20151708@urr-gw.casl.cs.uec.ac.jp> X-Deja-AN: 335852244 References: <6d0rv1$3e3$1@postman.riken.go.jp> <6er7u0$4oi$1@news-o.cc.titech.ac.jp> Mime-Version: 1.0 (generated by tm-edit 7.106) Content-Type: text/plain; charset=ISO-2022-JP Organization: Department of C.S., The University of Electro-Communications, Tokyo, Japan. Newsgroups: fj.lang.c,fj.os.linux