From: EGUCHI Osamu Date: 1999-02-07T17:59:48+09:00 Subject: [ruby-dev:4821] Re: compare to NaN (Re: Re: call for finite/isnan testers) えぐち@エスアンドイー です。 >>> On Sun, 7 Feb 1999 16:39:22 +0900, keiju@Rational.Com (石塚圭樹 ) said: keiju> けいじゅ@日本ラショナルソフトウェアです. keiju> keiju> In [ruby-dev :4813 ] the message: "[ruby-dev:4813] Re: compare to NaN keiju> (Re: Re: call for finite/isnan testers) ", on Feb/07 16:26(JST) EGUCHI keiju> Osamu writes: keiju> keiju> >えぐち@エスアンドイー です。 keiju> keiju> >拝見しました。 keiju> >深い議論があったのですね。 keiju> keiju> ですね(^^;;; keiju> keiju> >さて、inf と nan のポータブルな生成方法ですが、 keiju> >それ以前に、「本当にRuby の定数として必要か?」に keiju> >若干の疑問を感じはじめました。 keiju> keiju> 確かにその意見もあるかも知れないですね. 状態であると考えるわけですね. 無限/非数との一致は検査したいと思いますが、 式の中に無限が登場するのは、いまはあまり良い考えでは ないと思っています。 keiju> >IEEE 準拠と言う見方から、Float::INFINITY でよいように思えてきました。 keiju> > 具体的には番人に使うケースぐらいしか思い当たらないので、 それならば、 → Float::Max Float::Min で良いと思います。 非数の値を得たい、言う考え自体は私は放棄しました。 keiju> >数学の無限と、IEEE の無限を同一視する事が問題かも知れません。 keiju> > keiju> > isinf(1e999) => TRUE keiju> > keiju> >なあたり、計算機としての特性が理由で数学の無限とは食い違うのは keiju> >なかばしかたないと言う事で、現実的な用途に適応した仕様を keiju> >Ruby としては、探す必要があると思います。 keiju> keiju> 私も今はその考えに近いです. Ruby の Float は名前の通り、計算機の中で扱われる 浮動小数点数のクラスなので、数学の実数は Real として 実装する(実装できるようにする)のが良いと思います。 keiju> >話が飛びますが、BigFloat の私の持っているイメージですが、 keiju> > keiju> > 長い固定長の仮数部と Bignum の指数部をもつ浮動小数 keiju> > keiju> >をイメージしています。 keiju> >#大きく違ったイメージを持っている人いますか? keiju> keiju> BigFloatは昔作りました(四則演算だけ). そのときは keiju> keiju> 仮数部 keiju> 指数部 keiju> 精度(デフォルトのクラス定数(変数)としての精度と, 個別の精度) keiju> keiju> を持つものとして定義しました. keiju> keiju> 精度がないと, 1/3とか切りがなくなりますので. 有理数の全てを仮数/指数の対で表そうとすると、 この循環小数問題は避けがたいですね。 私は、固定精度を想定したのですが、 なるほど、可変精度を実装するわけですね、 この場合は、演算結果の精度のがいくつになるかの規則が問題ですね。 例えば 加限算は、絶対値の大きな項の精度になる 乗除算は、精度の小さな項の精度になる などです。 仮に BigFloat(仮数, 10を底とした指数, 10を底とした精度) とすると a = BigFloat(1.2, 3, 3) b = BigFloat(1.8, 0, 4) a + b ==> BigFloat(1.22, 3, 3) a * b ==> BigFloat(2.16, 3, 3) と言う意味です。 四則で既に問題なので、Math 相当の関数全てについて値の精度に 配慮するのは、かなり厄介ですね。 keiju> # 実装はしても, テストが中途半端なままほっといてんですが(^^;;; ありのままな状態で良いので、是非拝見したいです。 えぐち