児玉 です.

昼休みに HyperReal と InfinityClass を ftp サ−バ−に置きました.
ftp://ftp.math.kobe-u.ac.jp/pub/knot/polynomial-ruby.tar.gz
の hyperreal.rb, infinity.rb です.
未完成品なので要注意!


From: Shin-ichiro Hara <sinara / blade.nagaokaut.ac.jp>
Subject: [ruby-math:00272] Re: Infinity(was Polynomial.rb and floating point exception)
Date: Mon, 24 Apr 2000 10:34:56 +0900
Message-ID: <200004240134.KAA15862 / blade.nagaokaut.ac.jp>
....
> |0*∞=0 で, 0/0 や 1/0 は定義されません.
> 
> 昔、ruby-dev で 0*∞ が何であるべきか?という場面で話題になってました。

IEEE 的な 1.0/0.0 で Inf を返すと言うことは,
この局面では 0.0 を +epsilon とみなしているわけで,
0*∞ の扱いに気持の悪さが残るわけ.
上の場合では 真に 0 と考えて良いのでその分, 気が楽ですね.


> |例2. 微分は単に dx=無限小 としたときの,
> |df/dx = (f(x+dx)-f(x))/dx の標準実数部分として計算できる.
> |# ライプニッツ的微分.
> |Polynomial クラスに derivative があるので, そのほうが良いけど...
> 
> 結局、2つの超実数が同値であることのアリゴリズムがあるか、代表元である標
> 準実数を見つけるアルゴリズムがあるかってのが問題になる訳ですよね。なるほ
> ど、多項式ではOKなわけだ。


今のところ有理多項式程度しか扱えないので, まあ, そういう安直な作り.
# 実装を見たらあまりの安直さに泣けて来るかも?
# RationalPoly クラスの転用だし.

# 一般には関数芽を直に表現する事が出来れば完璧だけど?
滑らかな関数 f(x) に a:標準実数 として
無限小の単位 epsilon を考えると
f(a+epsilon) は f の a でのテイラ−展開を考えるとうまく行くと思います.
Math の関数は数値ではなく a でのテイラ−展開を返すように
改造する必要がある.
# ....のが大問題で, どうしましょう?

-- 
K.Kodama(kodama / kobe-kosen.ac.jp)