けいじゅ@日本ラショナルソフトウェアです.

In [ruby-math :00685 ] the message: "[ruby-math:00685] Re: complex#/
problem ", on Apr/11 19:38(JST) Shin-ichiro HARA writes:

>原です。

>> >やっぱりこれって Int/Int -> Rational と連動するんじゃないかなあ。
>>
>>かなぁ... じゃなくてぇ. でも, 原さんは int/int->int派だったはずでしたが
>
>いや、だから今回の案には私は反対なのです。

そうだったのかぁ(^^;;; 

でも, その他の解決策として何があります? 解決策としては

1. このまま(複素数/Matrixの整除を明確に定義するとよい?)
2. rationalにする
3. floatにする
4. errorを出す

ぐらいしか思いつきませんが...

>でも、間違いがないように、という事と、Ratinal 組み込みをにらんで、
>というのなら、「複合型の数クラスに対しては必要に応じて Rational 
>を使う」というのに賛成しちゃおうかな、、、(^^;

実装はこんな感じですね. divmodしてmodが0でなかったらrationalで返す. そん
なに悪くないかなとも思っていますが... Matrixの方はきついかも...

  def / (other)
    if other.kind_of?(Complex)
      self*other.conjugate/other.abs2
    elsif Complex.real_number?(other)
      if other.kind_of?(Integer) and @real.kind_of?(Integer)
	re, re_mode = @real.divmod(other)
	re += Rational(re_mode, other) if re_mode != 0
      else
	re = @real/other
      end
      if other.kind_of?(Integer) and @imag.kind_of?(Integer)
	im, im_mode = @imag.divmod(other)
	im += Rational(im_mode, other) if im_mode != 0
      else
	im = @imag/other
      end
      Complex(re, im)
    else
      x, y = other.coerce(self)
      x/y
    end
  end

__
..............................石塚 圭樹@日本ラショナルソフトウェア...
----------------------------------->> e-mail: keiju / rational.com <<---