なるせにっきスマートフォン用の表示で見るなるせにっきこの広告は、90日以上更新していないブログに表示しています。2038年問題の解決で述べられているとおり、RubyのTimeは内部表現にRationalを使えるようになっているので、その辺を司る部品ですね。ret;}x64アセンブラも見てみましょう。miniruby|lessで見ています。quo()は全てインライン化されていたので、ここではtime_subsecの逆アセンブル結果を見ていきます。_rb_raiseとりあえず、その前にこのLONG2NUMですが、このquoって基本割る数yが定数で使われるので、LONG2FIXを使うようにしましょうか。y);とすると、以下の通り_rb_int2bigが消えます。bが割り切れたかを確認しているのですね。前回の記事を読んだ方ならピーンとくるのではないでしょうか。/と%はコンパイラが一つにまとめてくれます。コンパイラにこのコードの意図を教えてあげましょう。retq......わかりづらいと思いますが、命令数が増えています。いうか、そもそもアセンブラに前回登場したidivがいません、ふしぎ。これは、定数の除算がコンパイル時点で乗算とシフトに置き換えられているからです。整数の割り算を掛け算に変換のシリーズが詳しいので解説は譲り、ここでは動きだけ確認しましょう。戻り値がFixnumか、1と論理積を取って判定。Fixnumの場合、VALUEは最下位ビットが1です。y)のxで、yは1000000000で定数なので消えています。ZFが0の時にジャンプ。123456789ってとこですね。同じ割り算を連続して行うようなアプリケーションならば、このような最適化をその都度行ってJIT的に処理すると言うことも考えられますが、Rubyだとちょっとやりづらいですかねぇ。今回は既にコンパイラが十分に最適化していたため、目立った成果はありませんでした。次回こそ頑張りましょう。2018-02-14はじめての投資SEGV探偵が往くはてなブログをはじめよう!nurseさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。