えぐち@エスアンドイー です。 >>> In message [ruby-dev:6302] Re: Precision in Mathematica (Re: Bigfloat) On Fri, 12 Mar 1999 20:44:03 +0900, keiju / rational.com (石塚圭樹 ) said: keiju> けいじゅ@日本ラショナルソフトウェアです. keiju> keiju> In [ruby-dev :6238 ] the message: "[ruby-dev:6238] Re: Precision in keiju> Mathematica (Re: Bigfloat) ", on Mar/12 01:35(JST) EGUCHI Osamu keiju> writes: keiju> keiju> >えぐち@エスアンドイー です。 ... keiju> >『1.0/0.0 => NaN ではないのか?!』と言う議論が keiju> >始まると、内心勝ち目がない様な気がしてました ^^;;;;;; keiju> keiju> 気分的にはそうですが, 原さんともうその話しはしないと誓ったので(^^;;; keiju> keiju> # 誰も誓ってないって? 了解。 keiju> >IEEE754 ですね、結局これと異なる解釈をする事は可能ですが、 keiju> >H/W の FPU やライブラリの支援が得られなくなる、のが難点ですね。 keiju> keiju> 確かにそういう話しもありますね. 効率貧乏症なので、すぐこういう発想をしてしまいます ^^;; keiju> >keiju> >それにしても、 1.0%0.0 => 1.0 は思い当たるものがないです。 keiju> >keiju> >ところでOSは何を御使用でしょうか? keiju> >keiju> dim% uname -a keiju> >keiju> Linux dim 2.0.30 #1 Mon Nov 10 14:08:33 JST 1997 i586 unknown keiju> >keiju> >ruby -v の結果を教えて下さい。 keiju> >keiju> dim% ruby -v keiju> >keiju> ruby 1.3.1(99/02/25) [i586-linux] keiju> >keiju> keiju> >keiju> です. keiju> > keiju> >OS 自体は再現環境がありませんが、 pentium の様ですし、 keiju> >多分 gcc でしょうから、思い当たるものがありません。 @_@ keiju> keiju> そうそうです. keiju> keiju> >keiju> デバッガで見てみたところ. keiju> keiju> >keiju> って感じです. value, resultは以下の行です. keiju> >keiju> keiju> >keiju> result = fmod(RFLOAT(x)->value, value); keiju> > keiju> >IEEE754 は、この場合 remainder() を使う事を指定しています。 keiju> >このことが関連しているのでしょうか? keiju> > keiju> >それにしても、 1.0%0.0 => 1.0 は、どう解釈してもおかしい ??? keiju> keiju> なにをしたら原因が分かりますでしょうか? #include <math.h> main() { printf("|%f|\n", fmod(1.0,0.0)); } はいくつですか? |1.0| ですか? fmod() は sunos には libc に、 freebsd では libm にありました。 どこにありますか? linux って glibc なんですよね、、 バージョンはいくつですか? glibc-2.1 は egcs でないと、うまくコンパイルできない様です。 これで現在 prep から消えています。 keiju> >keiju> # 0.0って9.1245819032751532e-313なんですね.... keiju> >keiju> # floatに対する信頼性がさらになくなるなあ... keiju> > keiju> >実際は、この値に相当するビットパターンをライブラリ等は keiju> >特別扱いしてるわけですが、デバガで見えてしまうと、 keiju> >なにか恥ずかしいですね ^^;;;; keiju> keiju> すると, 0.0は実際に9.1245819032751532e-313なんですか... そうか... 仮数 keiju> 部0にしていても, 省略された再上位の1があるから完全に0はないんですね... 指数はゲタ履き表現で、0.0 の指数のビットパターンの0で、 仮数も0かつ符合ビットも0なら 0.0 、符合ビットが 1 ならば、-0.0 です。 IEEE754 では 0.0 も -0.0 も独立のクラス(754用語の)なので、 値であるとともに、特異な状態でもある様です。 0.0 == -0.0 ==> true とか、、なにか「光は粒子であり波動である」みたいですね ^^);;; えぐち