K.Sasada's Home Page

こめんとのついか

こめんとこめんと!

message

please set comment :).

_11(Tue)

Ruby VM アドベントカレンダーの 11 日目です.

昨日は Flonum についてご紹介しまいた.今日は Flonum の実装をご紹介します.

詳細は 2008 年に論文を書いたのでご参照下さい.日本語です.

スライドのほうが見やすいです.多分.あと,ここでは Fixnum を 2 bit,Float を 1 bit のタグ長としましたが,Ruby 2.0 で実装された Flonum では,Float を 2 bit,Fixnum を 1 bit(これまでと変わらず)というように実装し直しています.

に,最終的にどうしたか,スライドにまとめてあります.

...だけだとあんまりなので,概要です.

というところから,ハックが入っていくわけですが,結果的には exponential のところを 2 bit 潰して,タグを埋め込むようにしました.で,2 bit 潰すと情報が失われてしまうため,決めうちをした範囲以外(昨日紹介した 1.72723e-77 より大きく 1.15792e+77 以下という範囲.あれ,未満だったかな? ちょっといい加減)だったら,Flonum を諦める,というようになっています.で,その範囲というのが exponential でいうと(以下略),という血湧き肉躍るハックになるわけです.あとは素晴らしいビット演算の世界に落とせるわけですが,その辺の最適化は shinh さんに提案して頂きました.ゴルファー凄い.

具体的には,include/ruby/ruby.h の VALUE rb_float_new(double),double rb_float_value(VALUE) あたりです.この説明にフラストレーションがたまった方は(多分たまると思う),ぜひコードを読んでみて下さい.短いからわかりやすいですよ.

では今日はこの辺で.


好きにコメントを編集してください。ただし、あまり他の人のコメントを書き換えることは感心しません。



back

tton 記述が使えます。YukiWikiな記述してりゃ問題ありません。

「行頭に#code」 と、「行頭に#end」 で挟むと、その間の行は pre で囲まれます。プログラムのソースを書くときに使ってください。

例:

#code

(なんかプログラム書く)

#end

リンクは

[[なまえ|http://www.example.org]]

とか

[[http://www.example.org]]

で貼れます。

$Date: 2003/04/28 10:27:51 $