From: keiju@... (=?ISO-2022-JP?B?GyRCQFBETTc9PHkbKEI=?= ) Date: 1999-02-18T19:45:53+09:00 Subject: [ruby-dev:5280] Re: Bigfloat [compare to NaN] けいじゅ@日本ラショナルソフトウェアです. In [ruby-dev :5231 ] the message: "[ruby-dev:5231] Re: Bigfloat [compare to NaN] ", on Feb/18 13:14(JST) GOTO Kentaro writes: >ごとけんです. >>うーん. このプログラムが何をやりたいのか明確ではありませんが... >>Bigfloat(...) で新たなクラスをつくって, そのインスタンスはBigfloatをイ >>ンスタンス変数として保持するんですね. デレゲートするってことかな? > >そうです.デレゲーションです. >>何か複雑ですね. そんなことしなくても良いと思いますよ. >とりあえずアイデアと言うことで (^^;; >こう言うのをいくつか書くと必要な道具が見出せると思っています. まあ, そうですけどね. 今は実装のことよりもインターフェイスを検討した方 が良いかと... そうすると, 自ずと実装も限られてくると. >>クラスがちゃんとないと >> >>num.prec(BigfloatXXXX) >> >>で指定ができないと思うんですが. > >出来ると思います. >いちお,アイデアだけを実現したうごくモノをつけます. >ポイントは,デレゲートクラスだけが精度をもち, >実体のクラスは精度上は抽象クラスだと言うことです. >% cat anum.rb (省略) この案を全然否定するつもりはないですが, Anumber(n) をすると必ずクラスを作りますよね. x = Anumber(56).new(10) y = Anumber(56).new(10) とすると, x, yが別のクラスになっているのが気持ち悪いですね. やはり, 生 成したクラスはどっかに保持していて, 同じ精度のクラスを調べたら同じクラ スを返した方が良いと思います. 私も[ruby-dev:4921]の最後で書いたように, 関数とパラメータでクラスを表 すのは良い案だと思うのですが, 気になっていることが2つあります: 1. クラス生成の方法(クラスを生成するとして) 2. 変換関数はどうするか? 1つめは, Bigfloat(n)でクラスを作るのか? それともそれは型変換関数かっ てことです. 普通, クラス名の関数は: Float(1) => 1.0 のように, 型変換関数ですよね. そうすると, Bigfloat(10) ってやった時にクラスを作られると何か間違えないかなあ...っ て点です. もうひとつは, 同やって型変換関数を定義するかなんですよね. Bigfloat(10)(100) => 10.00000000 とかは, とても書けないし... Bigfloat(prec, val= nil) で, 1引数ならクラスを返す, 2引数ならvalをprecで変換する. って手もあり ますが, やはり, 標準のインターフェイスと違っているし... Bigfloat(prec) Bigfloat(val, prec) ってのも... # 悩ましい. __ ................................石塚 圭樹@日本ラショナルソフトェア... ----------------------------------->> e-mail: keiju@rational.com <<---