意味悲鳴

PythonとかUnityとか.技術ブログでしたが,研究ブログにシフトしました.

Rubyの数値オブジェクト関連(Rational,Complex)の謎メモ

こんばんは。現在法事のために祖父宅に帰省(寄生)しております。持ってきた課題が終わって暇になり、かといって読書する気力も起きなかったので、Rubyをやることにしました。


若手エンジニア/初心者のためのRuby 2.1入門(6):RubyのNumericとTimeで数値と時間をさまざまな操作・演算・判定 (1/4) - @IT


これ見ながらやってるんですが、ちょこちょこ「こうやったらどうなるんだろう?」的なものを試したのでメモがてら書いておきます。

Rubyのバージョンは2.1.2です。

見ているページと同様にpryで実行するつもりだったんですが、仮想環境にpryをインストールできてなかったのでirbで実行します。テザリングで何かインストールするのは通信量的に怖いので(^_^;)規制は勘弁な

有理数(Rational)

1/2r == 2/4rだってのはよくわかったんですが。
1/2r == 1/2なのかなぁと思って実行。

2.1.2 :021 >   1/2 == 1/2r
 => false 

だめでした。まぁそりゃそうだよな。


それと、誤入力でなんかよくわからないオブジェクトができた。

2.1.2 :022 > Rational(1/2)
 => (0/1) 

なんだこれ。ちなみに正しい入力はRational(1,2)で、(分子、分母)の順で引数とってます。



ひょっとして分母を省略すると分母が一になるのかな?と思い試す。

2.1.2 :023 > Rational(1)
 => (1/1) 

2.1.2 :024 > Rational(5)
 => (5/1) 

どうやらそうらしい。


さて、さっきの入力に戻ります。書いていて気づいたんだけど、これって要するにRational(Rational(1,2))ってこと?というわけでいろいろ試す。

2.1.2 :032 > Rational(1,2)
 => (1/2) 

2.1.2 :034 > Rational(0.5)
 => (1/2) 

2.1.2 :033 > Rational((1/2))
 => (0/1) 

2.1.2 :035 > Rational(Rational(1/2))
 => (0/1) 

2.1.2 :036 > Rational(1/2r)
 => (1/2) 

ぬおおおおおおおお。もうこいつどうなってんだ。わたしの足りない脳みそでは理解が追いつかない。とりあえず、使うときは普通にRational(a,b)か、a/brで宣言したほうがいいかもしれません。挙動がよくわからんよこいつ。

複素数(Complex)

ページでも紹介されていたけど、複素数内で有理数つかったらどうなるかやってみた。

2.1.2 :014 > 1+42ri
 => (1+(42/1)*i) 

2.1.2 :015 > 1+4i
 => (1+4i) 

2.1.2 :016 > 1+Rational(1,2)i
SyntaxError: (irb):16: syntax error, unexpected tIDENTIFIER, expecting end-of-input

2.1.2 :040 > 1+1/2ri
 => ((1/1)-(1/2)*i) 

2.1.2 :041 > 1-1/2ri
 => ((1/1)+(1/2)*i) 

2.1.2 :042 > (1-1/2ri)+(1+1/2ri)
 => ((2/1)+(0/1)*i) 

最後、虚数反転してるように見えるんだけど。私の数学の知識が足りないのか。加算結果は多分正しいと思われるが。まぁ私の数学力はホント鼻くそレベルなんで、お分かりになる方ご連絡ください。

というか、リファレンス見れば一発のような気がするんだよなぁ。。。。。。ネット環境ください。

まぁ、普段この辺りの数値って使わないからね。時間あるときにでも調べたいと思います。