Ruby Summer of Code近況報告
※この記事は、私の英語版ブログのエントリをベースに和訳しています。
自分のRuby Summer of Codeプロジェクト、 Decimal はうまく行ってる感じです。
中間評価のためにいくつかの目標を設定しましたが、すべてがほぼ終わりました。
ただ注意していただきたいのは、この夏の作業が最新のtarball/gemに反映されていないことです(ごめんなさい…)。最新機能を試される方は、プロジェクトのsubversionレポジトリのtrunkからcheckoutをお願いします。(間もなく行う次のリリースには反映されます)
設定していた目標を順番に挙げてみます。
Webページの作成
まず最初に、シンプルなWebページを作りました。
単純過ぎかもしれません…が、必要な情報は載せたつもりです。少なくとも以前の(殺伐とした)ものよりは、良くなりました :)
以下のような情報が載っています。
数学関数の実装
最近の作業の中では、一番分かりやすい部分だと思います。
計24個の数学関数をDecimal::Math.function()
として実装しました。もちろんテストケース付きです。ほとんどの関数はBigDecimal
に欠けていたもので、::Math.function()
としてFloat
用にだけ存在していたものです。
acos(x, n)
acosh(x, n)
asin(x, n)
asinh(x, n)
atan(x, n)
atan2(y, x, n)
atanh(x, n)
cbrt(x, n)
cos(x, n)
cosh(x, n)
erf(x, n)
erfc(x, n)
exp(x, n)
frexp10(x)
(frexpのマネ)hypot(x, y, n)
ldexp10(x)
(ldexpのマネ)log(x, n)
とlog(x, arbitrary_base, n)
log10(x, n)
log2(x, n)
sin(x, n)
sinh(x, n)
sqrt(x, n)
tan(x, n)
tanh(x, n)
上記に加え、pi(n) と e(n) もあります。
xとyには、Decimal
かInteger
が指定できます。またnには(多くの場合、正の)Integer
を「スケール」(scale)として指定します。これは「小数点以下n桁」という意味です。
以下がその使用例です。
簡単でしょ? ;)
全関数がテストを通っており、ほとんど仕様も固まっているので、それほど大きなつまづきもなく使えると思います。チェックしてみてください! (ドキュメントは間もなく追記予定です。)
ただ残念ながら、gamma
とlgamma
という二つの関数だけが未実装です。これが、まだリリースができていない理由です。
最新のRubyへの対応
DecimalはRuby 1.9.1と1.9.2devに対応しました。Ruby 1.9.1でBignumの実装が改良されたので、Decimalを1.9.xと一緒に使えば性能も上がります。 (Decimalは内部的に、BignumのAPI群に依存しています)
もちろんRuby 1.8.xでもDecimalは使えますが、上記の理由から1.9系を推奨します。
既知のバグの修正
SEGVを起こしたり、誤った値を返したりするような、既知の致命的なバグは直しました。他にもバグや未確定の仕様はありますが、いじってみるためには十分安定していると思います。特にBigDecimalとスピードを比べてみてください。新しいだけあって、だいたい全部速いですよ。
次のリリースは……このあとすぐ!
残りの数学関数が実装・テスト完了次第、現状を「Decimal 0.1.0」としてtarballとgemでリリースする予定です。
もしDecimalの最新情報を手に入れたいという危篤な方は、日本語でおkなdecimal-talk-jaメーリングリストか、ここのフィードを見ていただければ幸いです。(英語ブログの方を優先して更新しますが、随時こちらにもportします。)
というわけで、次のリリースまでチャンネルはそのまま!