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)
最後、虚数反転してるように見えるんだけど。私の数学の知識が足りないのか。加算結果は多分正しいと思われるが。まぁ私の数学力はホント鼻くそレベルなんで、お分かりになる方ご連絡ください。
というか、リファレンス見れば一発のような気がするんだよなぁ。。。。。。ネット環境ください。
まぁ、普段この辺りの数値って使わないからね。時間あるときにでも調べたいと思います。