soukouki’s diary

この記事が、誰かの役に、なればいい。

Rubyで大きな値(数億桁)を扱うときのメモ

ある日。フィボナッチ数列の10億万番目とその前2つの値を計算して、割って黄金比を求めているときのメモ。

nilを代入しないとGCは片付けてくれない

まぁ、メモリがそこまで逼迫することはあまりないと思うけど。

割り算ができない

浮動小数点数に直すとInfinity行っちゃいます。

最初NaNを見た時は「えっ」ってなります。

小数を使いたい時は割られる側に大きな数を掛けておきましょう。

Integer#** の右側に大きな値を置けない

よく引っかかるやつ。

10**10_0000_0000 # なら
([10**(10_0000_0000/100)]*100).inject(:*) # 100の部分は適当に割り切れる数字で

計算に結構な時間がかかるのであれ(

右側の値は100万くらいなら大丈夫っぽい。

Integer(Bignum)#to_s でエラーが出る

to_s お前もか

`to_s': bignum too big to convert into `string' (RangeError) はえぇ・・

OKU = ([10**(100_0000)]*100).inject(:*) # ここだけで100秒かかります
def very_big_num_to_string n
    if n < OKU
        n.to_s
    else
        bottom = n % OKU
        top = n / OKU
        n = nil
        very_big_num_to_string(top) << bottom.to_s
    end
end

みたいなメソッドを作っておけばいいです。遅いけど...

file_nameとfilenameはどっちが多い?

ある時、ふと疑問に思ったのです。

file_nameと、filenameはどっちがいいのだろうかと。

ふつう単語の間にアンダーバーを入れる記法だと、file_nameです。

ですが、filenameの方をよく見かける気がします。

ってことで、githubで検索してみました。

filename Search · filename language:ruby · GitHub

file_name Search · file_name language:ruby · GitHub

結果は、

コードでの出現数
filename 2,951,932
file_name 804,566

と、Rubyではfilenameのほうがメジャーなようです。

ちなみに、いくつかのライブラリの結果です。 (CRubyは命名規則の違うC言語の部分があるのでやめておきました。)

rails rspec(組織全体で)
filename 129 70
file_name 50 35

filenameが多いですが、統一はされていないようです。

感想

Rubyではfilenameの方が多く使われてるっぽい。

とりあえずfilename使っとけばいいんじゃないかな。

english.stackexchange.com

コンパクトなRubyのREPLを作ったよ!

コンパクト。悪く言ったら低機能。

irbやpryとシェルの相性が悪かったので。

github.com (作ったよ!って言う割には別リポジトリに数か月前からあるのは内緒のお話)

対応してるもの

  • ローカル変数
  • マルチバイト文字

対応していないもの

  • 定義途中の改行(Enter押下)
  • ドキュメント等の読み込み
  • ステップ実行とか
  • などなど

23行のコンパクトなREPLです!

あ、最後に。

requireし直したい時は一回REPLを閉じてから開きます。

コマンドの引数にrequireするパスを指定できるのでうまく使ってくださいな。

Rubyのヒアドキュメントの配列の書き方

普通のヒアドキュメント

   <<-EOS
なんかいろいろ
  EOS

メソッドがついたヒアドキュメント

   <<-EOS.length
なんかいろいろ
  EOS

・・・配列のコンマはどこに置くんだ・・?

2回目のEOSの後ろ、2回目のEOSの次の行、3回目のEOSの前・・どれもうまくいかない

メソッドをそこに置くんだよな・・?もしや・・

ヒアドキュメントの配列

[
    <<-EOS,
なんかいろいろ
  EOS
    <<-EOS
なんかいろいろ
  EOS
]

できた!

Happy new year 2018!

あけましておめでとうございます。今年もよろしくお願いします。


ってみんな書いてるから検索エンジンで調べても出てこないんだろうなぁとw

12月の更新は1件だけ、しかもSimutransのしょっぼい記事。

まぁ、ボチボチやっていきます。

はっぴーにゅーいやー!


2時間後の編集。

月が明るいね