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

In [ruby-math :00688 ] the message: "[ruby-math:00688] Re: complex#/
problem ", on Apr/13 12:54(JST) Masahiro TANAKA writes:

>> 実装はこんな感じですね. 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
>
>これに、other が Integer の Complex の場合の処理も
>加わるんですよね。

えっと. otherがComplexでその実数部と虚数部が整数の時ってことですよね?

その場合は,

   def / (other)
     if other.kind_of?(Complex)
       self*other.conjugate/other.abs2

の ところで,

    complex / int 

になりますので,  

     elsif Complex.real_number?(other)
       if other.kind_of?(Integer) and @real.kind_of?(Integer)

の方で再度処理されます.

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