🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: fj.lang.c
Article #508

Re: 浮動小数点計算の規則

#508
From: Katsuhiko OHKUBO
Date: Fri, 20 Mar 1998 00:00
52 lines
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-mail
References: <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