From: keiju@... (=?ISO-2022-JP?B?GyRCQFBETTc9PHkbKEI=?= ) Date: 1998-03-14T06:11:07+09:00 Subject: [ruby-dev:1781] Re: infinity けいじゅ@日本ラショナルソフトウェアです. 何か数学の話しになっていますが... In [ruby-dev :01780 ] the message: "[ruby-dev:1780] Re: infinity ", on Mar/14 02:20(JST) Shugo Maeda writes: >前田です。 >僕が気持ち悪いと思ったのは、 > >Infinity * 0 > >という演算が、 > >Limit[x * 0, x -> Infinity] > >ではなく、 > >Limit[x * y, x -> Infinity, y -> 0] > >と解釈されている点なんです。 >前者ならf(x) = x * 0でxをいくら大きくしてもf(x)は0ですから、 >極限値は0ですよね? えーと. これはですね... 一応深い意味があるんです. まず, Limit[f(x, y), x -> a, y -> b] が収束するなら, どのような方法で極限をとっても同じ値になります. Limit[f(x, y), x -> a, y -> b] = Limit[Limit[f(x, y), x -> a], y -> b] = Limit[Limit[f(x, y), y -> b], y -> a] ... つまり, 1 / ∞ = 0 は十分自然な定義です. で, これを定義することによって0は, ただの0ではな くなって x -> 0という意味になります. そうすると, 0 * ∞ は, Limit[x * y, x -> Infinity, y -> 0] で考えなくてはならなくなるんです. だから, 0 * ∞ は不定と考えるのが自 然なんです. 0 * ∞ == 0 とすると, 何が起こるかで分かると思います. 0 = 0/∞ = (1 * ∞ ) / ∞ = 1 となって矛盾しちゃいますよね? もう1つこれはfloatだけにいえるることですが... 0.0は0に極めて近い数とい うだけで0とは限りません. そういう意味でも0は極限を取らないと行けないん です. >ここで言いたいのは前者と解釈されるべき、ということではなくて、 >前者と解釈されるべきか、後者と解釈されるべきかは決められないの >ではないか、ということです。 ># だから例外、というのなら妥当だと思います。 いや. そのとおりなんです(^^;;; 極限の取り方によって値が変わるようなものは, 例外とする極めて保守的な定 義を提案しているんです. >やはり理想的には極限値の計算はMathematicaみたいに明示的に >するべきなんでしょうね。 半分はあったっていますが, 半分は間違っています. 先ほどもいいましたが, 私がいっている定義は一番安全な定義なんです. この方法で収束するものはど のようにやっても同じ値になります. 収束しないものは, 極限の取り方によって任意の値にできるので, むりせず例 外にしているわけです. >とはいえ実用性を考えれば、[ruby-dev:1778]の石塚さんの定義が >妥当なのではないかと思います。 私自身, モデル的にはあまり自然でないと思っているのですが, Inf/NaNと同 じ動作になっているので(なっていますよね?), それなりの実用的意味になっ ているんですかね... __ ................................石塚 圭樹@日本ラショナルソフトェア... ----------------------------------->> e-mail: keiju@rational.com <<---