From: EGUCHI Osamu Date: 2000-01-07T22:37:10+09:00 Subject: [ruby-dev:8874] Re: DoubleFloat えぐち@エスアンドイー です。 >>> In message [ruby-dev:8871] Re: DoubleFloat On Fri, 7 Jan 2000 18:10:05 +0900, gotoken@math.sci.hokudai.ac.jp (GOTO Kentaro) said: gotoken> ごとけんです gotoken> gotoken> In message "[ruby-dev:8870] Re: DoubleFloat" gotoken> on 00/01/07, EGUCHI Osamu writes: gotoken> >あぁ、なるほど、結局 C の float や short の挙動と完全に一致する gotoken> >クラスを(データの)ポータビリティの為に欲しいと言う事ですね。 gotoken> >特に精度についての互換性を要求している様に思えますが、 gotoken> >この理解であってますか? gotoken> gotoken> です。 gotoken> gotoken> ぼくも最近まで知らなかったですが浮動小数点数は整数と異なり gotoken> IEEEでカッチリフォーマットが定められているので、xdr(3)を持ち gotoken> 出すまでもなく、ネットワークバイトオーダーでやりとりして双方 gotoken> では単精度で計算するような用途はわりかし多いんです。それと、 gotoken> 世の中に数アマタあるfortranで書かれたライブラリとの相性の問 gotoken> 題もあります。 なるほど、理解できました。 確かに、IEEE754 に殆んど統一されているため、むしろ整数よりも 同一精度の浮動小数点の方がポータブルなんですね一致するんですね。 #こう言う見方で考えた事なかったです。頭っから否定して失礼しました。_o_ gotoken> それと引用の順序が前後しますが、 gotoken> gotoken> >処理系への依存性は確かに高いですが、たとえば、 gotoken> > gotoken> > #include gotoken> > main() gotoken> > { gotoken> > printf("%u\n", sizeof (long double)); gotoken> > } gotoken> > gotoken> >って大体今の処理系では通りませんか? gotoken> >#ただ、例えば printf() が "%lf" をサポートしているか等は微妙! gotoken> >また、long double をサポートしていない処理系では、 gotoken> >ソフトウェアによる実装よりも、未サポート例外か、Float で代替 gotoken> >が良いように思えます。 gotoken> gotoken> 処理系依存というのは未サポートというよりも実装がまちまちだと gotoken> 言う意味でした。Intel系のと SPARC や PowerPC の long double gotoken> は長さが違うという問題もあります。更に FreeBSD だといちいち gotoken> fpsetprec を呼ばないといけないと言った阿呆らしい問題もあって 互換性を考えると、拡張倍精度は難物ですね、拡張倍精度のフォーマットは、 有効数字桁 64以上、指数のビット長 15以上、全体のビット長 79以上 なので、たとえば 同じ 80 ビットの拡張倍精度でも、仮数:指数の比率が 不一致の可能性があるのも厄介ですね。 gotoken> long double のサポートは結構悩ましいです。ちなみに個人的には gotoken> long double はカオスがらみの神経質な計算でしか使ったことない gotoken> です。 案外(と思うのは私だけ?)、殆どの用途が、倍精度以下の精度で済むんですね。 [ruby-dev:8871]で、述べられているように、 LongDoubleFloat < Float という位置付けで、long double を実現すると言うのも、 可能性として、面白そうですね。 #プラットホームが異なっても同一の精度を持たせられるか問題だけれども。 ##これは多分ハードウェアとコンパイラなどの処理系の問題 えぐち