From: Shin-ichiro HARA Date: 2003-07-23T12:30:41+09:00 Subject: [ruby-dev:20810] Rational 始めました。 原です。 Rational は、メンテナがいるなら 1.8.1 あたりで組み込みにできる、 というまつもとさんの話なので、やってみようと思います。一応動くも のができたのですが、いい加減な計測では Rational(355, 133) + Rational(355, 133) + ... + Rational(355, 133) で 20 倍ぐらい、 Rational(355, 133) * Rational(355, 133) * ... * Rational(355, 133) で 60 倍ぐらい速いみたいなんで、価値はありそうです。他の数関係の ライブラリにとっても Rational の存在を前提にできるメリットは大き そうですし。 すぐ公開しますが、その 1.8.0 preview4 前に rational.rb, mathn.rb で 2つお願いしたいことがあります。 (1) Rationa.new を公開してほしい。 だだし、Rational.new(a, b) の意味は、現在の Rational(a, b) と同じ。 Rational.new!(a, b) は、現在のまま。 これは幾つか理由がありますが、さしあたって、クラス Rational の存在を知っ たユーザーが 2/3 を生成しようとして、Rational.new(2, 3) としてみるは自 然で、それを禁止する事もないかなと思うからです。 (2) mathn.rb で、@numerator, @denominator を使わず、Rational#numerator, Rational#denominator を使ってほしい。 組み込みにしたとき、インスタンス変数を設定するとかなり速度が落ちるよう なので。 あと、気づいた事ですが、 rational.rb では gcd に Stein のビット演算による方法を使っていますが、 やっぱり遅いみたいです。C で書いても、特定の条件でのみユークリッドの方 法より速いみたいです。その条件の判定を低コストでできるなら、内部で切り 替えるのもいいかと思います。 Rational が組み込みになるのと同時に組み込みにしたいのは、何でしょうか ね。一応、 Integer#gcd Integer#lcm Integer#to_r Integer#quo の変更 は欲しいですよね。他には? この際、Numeric#zero, Numeric#unity も作っちゃったらどうかな。