[#4566] [Q] internal type of klass — gotoken@... (GOTO Kentaro)
ごとけんです
[#4576] Ruby ruby-1.3.1-990201 — matz@... (Yukihiro Matsumoto)
Ruby ruby-1.3.1-990201 is out, check out:
[#4603] call for finite/isnan testers — gotoken@... (GOTO Kentaro)
ごとけんです
稲葉です。
ごとけんです
稲葉です。
えぐち@エスアンドイー です。
まつもと ゆきひろです
えぐち@エスアンドイー です。
わたなべです.
えぐち@エスアンドイー です。
えぐち@エスアンドイー です。
まつもと ゆきひろです
ごとけんです
Regard to "[ruby-dev:4788] Re: compare to NaN (Re: Re: call for finite/isnan testers)"
ごとけんです
Regard to "[ruby-dev:4867] Re: compare to NaN (Re: Re: call for finite/isnan testers)"
えぐち@エスアンドイー です。
Regard to "[ruby-dev:4875] Re: compare to NaN (Re: Re: call for finite/isnan testers)"
えぐち@エスアンドイー です。
Regard to "[ruby-dev:4901] Re: compare to NaN (Re: Re: call for finite/isnan testers)"
えぐち@エスアンドイー です。
Regard to "[ruby-dev:4934] Re: compare to NaN (Re: Re: call for finite/isnan testers)"
えぐち@エスアンドイー です。
ふなばです。
えぐち@エスアンドイー です。
えぐち@エスアンドイー です。
けいじゅ@日本ラショナルソフトウェアです.
えぐち@エスアンドイー です。
けいじゅ@日本ラショナルソフトウェアです.
えぐち@エスアンドイー です。
けいじゅ@日本ラショナルソフトウェアです.
えぐち@エスアンドイー です。
えぐち@エスアンドイー です。
けいじゅ@日本ラショナルソフトウェアです.
えぐち@エスアンドイー です。
けいじゅ@日本ラショナルソフトウェアです.
えぐち@エスアンドイー です。
えぐち@エスアンドイー です。
けいじゅ@日本ラショナルソフトウェアです.
えぐち@エスアンドイー です。
けいじゅ@日本ラショナルソフトウェアです.
ごとけんです
けいじゅ@日本ラショナルソフトウェアです.
ごとけんです.
けいじゅ@日本ラショナルソフトウェアです.
ごとけんです
けいじゅ@日本ラショナルソフトウェアです.
ごとけんです
けいじゅ@日本ラショナルソフトウェアです.
ごとけんです
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
ごとけんです
まつもと ゆきひろです
まつもと ゆきひろです
えぐち@エスアンドイー です。
えぐち@エスアンドイー です。
けいじゅ@日本ラショナルソフトウェアです.
えぐち@エスアンドイー です。
けいじゅ@日本ラショナルソフトウェアです.
えぐち@エスアンドイー です。
けいじゅ@日本ラショナルソフトウェアです.
えぐち@エスアンドイー です。
けいじゅ@日本ラショナルソフトウェアです.
えぐち@エスアンドイー です。
けいじゅ@日本ラショナルソフトウェアです.
えぐち@エスアンドイー です。
けいじゅ@日本ラショナルソフトウェアです.
えぐち@エスアンドイー です。
けいじゅ@日本ラショナルソフトウェアです.
えぐち@エスアンドイー です。
けいじゅ@日本ラショナルソフトウェアです.
えぐち@エスアンドイー です。
けいじゅ@日本ラショナルソフトウェアです.
えぐち@エスアンドイー です。
けいじゅ@日本ラショナルソフトウェアです.
えぐち@エスアンドイー です。
けいじゅ@日本ラショナルソフトウェアです.
えぐち@エスアンドイー です。
けいじゅ@日本ラショナルソフトウェアです.
えぐち@エスアンドイー です。
えぐち@エスアンドイー です。
ごとけんです
In message <199902102105.GAA28213@hanare00.math.sci.hokudai.ac.jp>
えぐち@エスアンドイー です。
ごとけんです
えぐち@エスアンドイー です。
ごとけんです
えぐち@エスアンドイー です。
Regard to "[ruby-dev:5023] Re: [PATCH] configure w/ isinf() (Re: 10e9999.to_i)"
えぐち@エスアンドイー です。
えぐち @エスアンドイーです。
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
えぐち@エスアンドイー です。
けいじゅ@日本ラショナルソフトウェアです.
えぐち@エスアンドイー です。
けいじゅ@日本ラショナルソフトウェアです.
えぐち@エスアンドイー です。
けいじゅ@日本ラショナルソフトウェアです.
えぐち@エスアンドイー です。
けいじゅ@日本ラショナルソフトウェアです.
えぐち@エスアンドイー です。
けいじゅ@日本ラショナルソフトウェアです.
えぐち@エスアンドイー です。
けいじゅ@日本ラショナルソフトウェアです.
えぐち@エスアンドイー です。
けいじゅ@日本ラショナルソフトウェアです.
えぐち@エスアンドイー です。
けいじゅ@日本ラショナルソフトウェアです.
えぐち@エスアンドイー です。
けいじゅ@日本ラショナルソフトウェアです.
えぐち@エスアンドイー です。
けいじゅ@日本ラショナルソフトウェアです.
えぐち@エスアンドイー です。
けいじゅ@日本ラショナルソフトウェアです.
えぐち@エスアンドイー です。
けいじゅ@日本ラショナルソフトウェアです.
[#4614] Re: cookie on cgi-lib.rb — Wakou Aoyama <wakou@...>
青山です。
五十嵐です。
青山です。
まつもと ゆきひろです
高橋です。なつかしい話題が。
前田です。
前田です。
前田です。
五十嵐です。
青山です。
五十嵐です。
青山です。
[#4615] HTML generator — Wakou Aoyama <wakou@...>
青山です。
原です。
青山です。
原です。
青山です。
原です。
前田です。
安達@沖データと申します。
まつもと ゆきひろです
まつもと ゆきひろです
まつもと ゆきひろです
まつもと ゆきひろです
まつもと ゆきひろです
まつもと ゆきひろです
原です。
原です。
原です。
前橋です。
[#4619] Why automake+libtool? (Re: --enable-shared/BSD) — Motoyuki Kasahara <m-kasahr@...>
笠原です。
まつもと ゆきひろです
笠原です。
わたなべです.
笠原です。
まつもと ゆきひろです
笠原です。
[#4640] Ruby 1.3.1-990203 — matz@... (Yukihiro Matsumoto)
Ruby 1.3.1-990203 is out, check out:
ごとけんです
まつもと ゆきひろです
ごとけんです
まつもと ゆきひろです
[#4727] [REQ] 2進数整数リテラル — EGUCHI Osamu <eguchi@...>
えぐち@エスアンドイーです。
ごとけんです
まつもと ゆきひろです
えぐち@エスアンドイー です。
[#4755] Re: call for finite/isnan testers — KIMURA Koichi <kbk@...>
[#4767] [BUG] gsub?, Hash? — Wakou Aoyama <wakou@...>
青山です。
[#4825] Backslash(EOL) in comment — WATANABE Hirofumi <eban@...>
わたなべです.
まつもと ゆきひろです
青山です。
永井@知能.九工大です.
まつもと ゆきひろです
永井@知能.九工大です.
[#4829] Re: to_i,to_s の素朴な疑問 — HQss_YasuiS/hq_ss@...
[#4837] man Precision — gotoken@... (GOTO Kentaro)
ごとけんです
けいじゅ@日本ラショナルソフトウェアです.
ごとけんです
けいじゅ@日本ラショナルソフトウェアです.
[#4851] Re: port NetBSD/ alpha 1.3I — SHIROYAMA Takayuki <psi@...>
[#4852] Re: module Precision — "豊福" <toyofuku@...>
豊福@パパイヤです。
[#4853] Integer#format — Koji Arai <JCA02266@...>
新井です。
まつもと ゆきひろです
新井です。
まつもと ゆきひろです
新井です。
まつもと ゆきひろです
新井です。
まつもと ゆきひろです
新井です。
まつもと ゆきひろです
新井です。
まつもと ゆきひろです
In message <E10Ep01-00009q-00@ev.netlab.co.jp>
まつもと ゆきひろです
ごとけんです
まつもと ゆきひろです
ごとけんです
[#4893] Ruby 1.3.1-990209 — Yukihiro Matsumoto <matz@...>
Ruby 1.3.1-990209 is out, check out:
青山です。
まつもと ゆきひろです
立石です。
[#4900] Ruby 1.3.1-990209 — Yukihiro Matsumoto <matz@...>
Ruby 1.3.1-990209 had serious flaw in installer. I re-packedaged it.
えぐち@エスアンドイー です。
[#4929] Re: module Precision — "豊福" <toyofuku@...>
豊福@パパイヤです。
[#4950] parse error "and" — Koji Arai <JCA02266@...>
新井です。
えぐち@エスアンドイー です。
まつもと ゆきひろです
新井です。
えぐち@エスアンドイー です。
えぐち@エスアンドイー です。
まつもと ゆきひろです
えぐち@エスアンドイー です。
まつもと ゆきひろです
[#4970] Re: to_i,to_s の素朴な疑問 — HQss_YasuiS/hq_ss@...
前田です。
けいじゅ@日本ラショナルソフトウェアです.
前田です。
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
安井、改め moochan です。よろしく。
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
ごとけんです
前田です。
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
まつもと ゆきひろです
まつもと ゆきひろです
まつもと ゆきひろです
まつもと ゆきひろです
まつもと ゆきひろです
[#4971] Ruby 1.3.1-990210 — Yukihiro Matsumoto <matz@...>
It's about time for daily Ruby delivery. ;-)
立石です。
[#5010] #{\n}\\ in heredoc — Koji Arai <JCA02266@...>
新井です。
[#5083] [req] cgi-lib NPH support — Shugo Maeda <shugo@...>
前田です。
前田です。
前田です。
前田です。
前田です。
前田です。
前田です。
前田です。
前田です。
前田です。
前田です。
前田です。
青山です。
[#5086] [FIX] checking whether [sg]etpgrp takes no argument — EGUCHI Osamu <eguchi@...>
えぐち@エスアンドイーです。
[#5099] [PATCH] infinite loop of inspect (ruby-1.2.2) — gotoken@... (GOTO Kentaro)
ごとけんです
[#5119] Ruby 1.3.1-990215 — Yukihiro Matsumoto <matz@...>
Ruby 1.3.1-990215 is out, check out:
渡辺哲也です。
渡辺哲也です。
まつもと ゆきひろです
えぐち@エスアンドイー です。
渡辺哲也です。
えぐち@エスアンドイー です。
[#5141] [req] rb_setenv() — Shugo Maeda <shugo@...>
前田です。
[#5176] mod_ruby 0.0.4 — Shugo Maeda <shugo@...>
前田です。
[#5215] Re: a genericity — toyofuku@...
豊福@パパイヤです。
ごとけんです
原です。
けいじゅ@日本ラショナルソフトウェアです.
ごとけんです
けいじゅ@日本ラショナルソフトウェアです.
ごとけんです
原です。
ごとけんです
原です。
けいじゅ@日本ラショナルソフトウェアです.
ごとけんです
まつもと ゆきひろです
[#5264] Re: ruby 1.2.3 released — Jun Adachi <adachi@...>
安達@沖データと申します。
[#5270] Prec.html — gotoken@... (GOTO Kentaro)
ごとけんです
[#5287] Time class — Tadayoshi Funaba <tadf@...>
ふなばです。
まつもと ゆきひろです
ふなばです。
まつもと ゆきひろです
[#5395] Subseq of Array — Inaba Hiroto <inaba@...>
稲葉です.
青山です。
青山です。
福間@福岡 です。
自己フォローです。
まつもと ゆきひろです
青山です。
まつもと ゆきひろです
青山です。
ふなばです。
青山です。
ふなばです。
青山です。
原です。
青山です。
原です。
ふなばです。
青山です。
ふなばです。
青山です。
ふなばです。
青山です。
ふなばです。
青山です。
まつもと ゆきひろです
青山です。
まつもと ゆきひろです
ふなばです。
青山です。
えぐち@エスアンドイー です。
青山です。
けいじゅ@日本ラショナルソフトウェアです.
ふなばです。
青山です。
青山です。
青山です。
青山です。
まつもと ゆきひろです
原です。
青山です。
原です。
青山です。
ふなばです。
青山です。
[#5455] io_write — IKARASHI Akira <ikarashi@...>
五十嵐です。
[#5527] Re: [ruby-list:12268] Re: It wants to install mon_ruby — moochan <moochan@...>
moochan です。
moochan です.
moochan です.
わたなべです.
[#5558] [BUG] module_eval — keiju@... (Keiju ISHITSUKA)
けいじゅ@日本ラショナルソフトウェアです.
[#5564] Ruby 1.3.1-990224 — Yukihiro Matsumoto <matz@...>
Ruby 1.3.1-990224 is out, check out:
渡辺哲也です。
えぐち@エスアンドイー です。
わたなべです.
ふなばです。
[#5570] Hash.new — gotoken@... (GOTO Kentaro)
ごとけんです
まつもと ゆきひろです
ごとけんです
まつもと ゆきひろです
ごとけんです
まつもと ゆきひろです
[#5575] Re: a genericity — "豊福" <toyofuku@...>
豊福@パパイヤです。
ごとけんです
けいじゅ@日本ラショナルソフトウェアです.
ごとけんです
えぐち@エスアンドイー です。
ごとけんです
えぐち@エスアンドイー です。
けいじゅ@日本ラショナルソフトウェアです.
えぐち@エスアンドイー です。
[#5601] Re: Hash.new — Inaba Hiroto <inaba@...>
稲葉です.
稲葉です。
まつもと ゆきひろです
ごとけんです
まつもと ゆきひろです
[#5641] [REQ] mod_ruby ENV['HTTP_CONNECTION'] — Wakou Aoyama <wakou@...>
青山です。
[#5676] Ruby 1.3.1-990225 — Yukihiro Matsumoto <matz@...>
Ruby 1.3.1-990225 is out, check out:
[#5725] VERSION_DATE — Wakou Aoyama <wakou@...>
青山です。
[#5726] SERVER_SOFTWARE (mod_ruby) — Wakou Aoyama <wakou@...>
青山です。
[#5752] irb on ruby-1.4 — keiju@... (Keiju ISHITSUKA)
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
まつもと ゆきひろです
まつもと ゆきひろです
まつもと ゆきひろです
まつもと ゆきひろです
まつもと ゆきひろです
まつもと ゆきひろです
[#5776] Precision in Mathematica (Re: Bigfloat) — gotoken@... (GOTO Kentaro)
ごとけんです
けいじゅ@日本ラショナルソフトウェアです.
えぐち@エスアンドイー です。
けいじゅ@日本ラショナルソフトウェアです.
えぐち@エスアンドイー です。
えぐち@エスアンドイー です。
ごとけんです
けいじゅ@日本ラショナルソフトウェアです.
[ruby-dev:5408] Re: Bigfloat [compare to NaN]
けいじゅ@日本ラショナルソフトウェアです.
In [ruby-dev :5397 ] the message: "[ruby-dev:5397] Re: Bigfloat
[compare to NaN] ", on Feb/20 19:28(JST) GOTO Kentaro writes:
>ごとけんです
>>>ちなみに現行では Integer.induced_from() は Integer() と同じく
>>>変換にしてますが,これと必ずインスタンスを生成するのとくらべると,
>>>どっちがよいですか??
>>ん? いっている意味がよく分かりません. もうちょっと詳しくお願いします
>>(__;;;
>
>つまり,Integer.induced_from(a).id == Integer(a).id
>がなりたつかどうかです.現行では,Integer.induced_from(a)
>は a.kind_of?(Integer) のとき a をそのまま返し,
>そうでなければ新しくインスタンスを生成して返します.
>これは Integer() の挙動を採用しているためです.
>
>例:
>
> a = 1000000000000000000000000000
> p a.id == Integer(a).id #=> true
> p a.id == Integer.induced_from(a).id #=> true
>
>これと,必ずインスタンスを生成するのとくらべると,
>どっちがよいですか??
これは.
>>ちょっとだけ言わしてもらえば, 数関係クラスのインスタンスにはnewはふさ
>>わしくないって気がしています. 数っていうものは(仮想的に)既に存在してい
>>てそれを使えるように引っ張ってくるというイメージです.
ということからも, インスタンスを生成しなくて良いと思っています.
>なるほど.それなら,Bigfloat がデフォルトの精度を持たないとして
>Bigfloat.new をユーザーから隠蔽できるような仕組みが必要かも
>知れませんね.
そこまでこだわることもないと今は思っていますが, 今は実現不可能ではない
ですね.
できれば, 全ての数値関連クラスではnewがない方が良いかと思います.
>>>::class は文法的に無理でしょう.::CLASS かな.
>下の案に基本的に賛成してもらえたので,後学のために
>お聞きしたいのですが,どうやるんですか??
なにも. ふつうです.
class Foo
def Foo.class
p 1
end
end
Foo.class
これは, ちょっと前のバージョンからできるようになっています.
>>> Bigfloat
>>> Bigfloat() # 精度が不定のクラス Bigfloat !< Precision
>>
>>ここと.
>>
>>> Bigfloat(prec) # クラス.
>>> Bigfloat[num]
>>> Bigfloat()[num] # 精度が不定というエラーにすべきか?
>>
>>ここ.
>>デフォルト精度があっても良いかも知れませんね. 大体の人は1つの精度で使
>>うと思うし.
>>
>># 精度不定のクラスが意味があるなら別ですが.
>
>たぶん,インターフェイスの実装は前に僕が Anumber として
>示したデレーゲーションに既存のクラス生成を抑止したような
>ものになると思いますので, x.kind_of?(Bigfloat) を
>チェックするために不定も意味があると思います.
実装に関しては, まだ早いかと思わないでもないですが.
1. 個々のインスタンスが精度を持っているが無駄じゃないか?
2. この場合デレゲーションをしなくても良いのではないか?
という感じがあります. 数値関係のインスタンスは量が多くなる傾向があるこ
とと, 精度をそんなに変えて使うかな? って思いがあります. ということで,
クラスに精度の情報を持たせた方がいいかな? って思っています.
あまり考えずにサブクラスを作るのは私は反対しているのですが, ここでは,
デレゲーションを使わないで済むなら使わなくても. って気分があります.
ということで私の実装案をこのメイルの末尾につけます.
ごとけんさんの案とそんなに違いないんですが.
1. Bigfloatはデフォルトの精度を持っている
2. Bigfloat(prec)はBigfloatのサブクラスとする.
Bigfloat(prec).nameすると変な文字が出るのも可哀想なので定数に設定し
ています. # Bigfloat.to_s, nameを再定義した方がかっこういいかな...
3. 精度の情報はクラスのインスタンス変数に持たせている
具体的に実装してあるのは, 以下のメソッドですが実際に動作します(実質的
に+だけですけど). coerceも精度の高い方にちゃんと合わせます(^^;;
class Bigfloat < Numeric
def Bigfloat.class(prec)
def Bigfloat.PREC
def prec
def Bigfloat.[](*param)
def +(other)
def coerce(other)
end
def Bigfloat(prep)
デフォルトの精度を持っては駄目となるとちょっと変わってきますが, 実装で
きないこともないでしょう.
あと, デフォルトの精度を持つとしてもユーザが指定できた方がいいかなと思
いますので, その時もちょっと実装が変わるかなと...
# 見ていただくと理解していただけると信じているのですが, ごとけんさんの
# よりもエレガントかと(^^;;;
そうそう, えぐちさんバグを見つけました. initializeのなかのRationalの対
応部分です.
# 大元になった私のbigfloatがバグっていたせいですが(^^;;;
>>私はこの案に基本的に賛成です.
>>1つあるとしたら, パラメータ付きはみな -zationをつけるとなっていると,
>>区別がつきやすくていいなと思うぐらいですが.
>>
>> Bigfloat デフォルト精度のBigfloat
>> Bigfloatization(perc) 精度付きのBigfloat
>> Matrixization(klass, n, m) パラメトライズドMatrix
>
>Matrixization という言葉がいいのかどうかは英語人の
>数学者じゃないので分かりませんが,有理化や複素化が
>整域や単位的環に対して自然に定義できるのにくらべ
># 複素化は初耳でしたが単位的環なら出来るみたいですね.
>行列というのはは線形作用素の表現ですから行列化と
>聞くとなんか違うもの(例えばリー環の表現とか)を想起します.
うーん. そうですか...
>>あと, グローバルなインターフェイスの変更(追加)も含んでいるので, 松本氏
>>の意見なんかも聞きたいなと思ったりして.
>同感です.そんな分けで長く引用してみました.
実際にテストしていると
Bigfloat(100)[10]
結構書きづらいなと. やはりデフォルトの精度はあった方が良いなぁって気が
しました. あと,
Bigfloat(100)
は, この場合クラスを返すんですが, 他の場合と比べると, 数値を返すような
気にさせてしまいますね...
やはり
>> Bigfloat デフォルト精度のBigfloat
>> Bigfloatization(perc) 精度付きのBigfloat
ってなっていた方が良いかなあ... って気もします.
ここから. Bigfloat(prec)案
--
#
# bigfloat.rb:
#
require "e2mmap"
# dummy definition
class Rational<Numeric;end
class Complex<Numeric;end
def inf?(n)
n == n * 1.1
end
def nan?(n)
n != n
end
class Bigfloat < Numeric
extend Exception2MessageMapper
def_e2message(TypeError, "wrong argument type %s (expected %s)")
BASE = 10 # XXX base of @exp
@PREC = 32 # XXX default prec
CLASSES = {}
CLASSES[@PREC] = self
def Bigfloat.class(prec)
raise "err!!" if !prec.kind_of?(Integer) or prec <= 0
return CLASSES[prec] if CLASSES[prec]
CLASSES[prec] = klass = Class.new(Bigfloat)
const_set("P_#{prec}", klass)
klass.instance_eval{@PREC = prec}
klass
end
def Bigfloat.PREC
@PREC
end
def prec
type.PREC
end
def Bigfloat.[](*param)
self.new(*param)
end
def Bigfloat.count_prec_of_float
i, a, b = 0, 1, 1.0 / BASE
begin
o, a, b, i = a, a + b, b / BASE, i + 1
end until(a == o)
i
end
FLOAT_PREC = Bigfloat.count_prec_of_float
attr :sign # plus(and zero):+1, minus:-1, +Inf:+Inf, -Inf:-Inf, NaN:NaN
attr :prov # PREC'digits prov.
attr :exp # base BASE of exp.
def normalize!
if @prov == 0 then
@sign, @prov, @exp = +1, 0, 0
return
end
@sign, @prov = +1, @sign * @prov
@sign, @prov = -@sign, -@prov if @prov < 0
while @prov < BASE ** prec
@prov *= BASE
@exp -= 1
end
while @prov >= BASE ** (prec + 1)
@prov /= BASE
@exp += 1
end
end
def initialize(num, exp = 0)
@sign, @prov, @exp = +1, 0, 0
case num
when Integer
@sign, @prov, @exp = +1, num, exp
when Rational
num = type.new(num.numerator) / type.new(num.denominator)
@sign, @prov, @exp = num.instance_eval("[@sign, @prov, @exp ]")
when Float
if inf?(num) or nan?(num) then
@sign, @prov, @exp = num, 0, 0
return
end
@sign = +1;
@sign, num = -1, -num if num < 0
exp10 = Integer(Math.log10(num))
@exp = exp10 - FLOAT_PREC
@prov = Integer(num / (BASE ** @exp))
when String
case num
when /^\s*([+]?Inf)$/
@sign = +1.0 / 0.0
return
when /^\s*(-Inf)$/
@sign = -1.0 / 0.0
return
when /^\s*NaN$/
@sign = 1.0 % 0.0
return
when /^\s*([-+]?[0-9]*)\.?([0-9]*)([eE]([+-]?[0-9]+))?$/
@prov = $1.to_i * (10 ** $2.size)
@sign, @prov = -1, -@prov if @prov < 0
@prov += $2.to_i
@exp = -$2.size
@exp += $4.to_i if $4
end
when Bigfloat
@sign, @prov, @exp = num.instance_eval("[@sign, @prov, @exp ]")
else
Bigfloat.fail(TypeError,
num.type,
"Inetger, Float, String, Bigfloat or Rational")
end
normalize!
end
def inspect
"Bigfloat(#{to_a})"
end
def to_s
return @sign.inspect if inf?(@sign) or nan?(@sign)
s = ""
s += "-" if @sign < 0
n, d = @prov.divmod(10 ** prec)
s += n.inspect
s += "."
s += format("%0*d", prec, d.inspect)
# return s if @prov == 0 or (@exp + prec) == 0
s += "E"
s += (@exp + prec).inspect
end
def abs
sign, prov, exp = instance_eval("[@sign, @prov, @exp]")
type.new(sign, prov, exp)
end
def to_i
Integer(@sign * @prov * 10 ** @exp)
end
def to_f
@sign * @prov * 10.0 ** @exp
end
def +(other)
case other
when Bigfloat
if prec != other.prec
x, y = other.coerce(self)
return x + y
end
#break
when Integer, Rational, Float
other = type(other)
when Complex
return Complex(self) + other
else
x, y = other.coerce(self)
return x + y
end
left = @sign * @prov
right = other.sign * other.prov
if @exp > other.exp then
left *= BASE ** (@exp - other.exp)
exp = other.exp
else
right *= BASE ** (other.exp - @exp)
exp = @exp
end
type.new(left + right, exp)
end
def coerce(other)
case other
when Bigfloat
if prec > other.prec
return type[other], self
else
return other, other.type[self]
end
when Integer, Rational, Float
return type(other), self
when Complex
return other, Complex(self)
else
super
end
end
end
def Bigfloat(prep)
Bigfloat.class(prep)
end
__
................................石塚 圭樹@日本ラショナルソフトェア...
----------------------------------->> e-mail: keiju@rational.com <<---