正木です。

|From: keiju / ishitsuka.com (石塚圭樹)
|Subject: [ruby-math:00596] Re: int / int -> ?

|うーん. 判断を与えるとまずい? 正木さんの[ruby-math:00561]にあったように、
|
|  純粋数(int, rational, real, ...)
|  疑似数(float)
|  それらの数組み合わされる数(complex, ...)
|  数以外(Matrix, Vector, 多項式...)
|
|ってわけて, 純粋数だけ相互変換できるようにすればよいと思いますが? 

最近の石塚さんの意見にはほぼ賛成ですが、ここは少し違います。

  純粋数(natural, int, rational, real, complex)
  疑似数(float, BigFloat)
  それ以外の数(quaternion,Ideal, ...)
  数以外(Matrix, Vector, 多項式...)

数学的には complex まで考えて初めて完結した体系が作れます。
整数に関する問題であっても複素数なしでは解けないものはたくさんあります。


Ruby では仕様が気に入らなければ自分で書き直せばいいだけのことですから、
(Rational#inspect も以前から a/b にしています)
元の仕様はどうでもいいような気がしてきました。
というのはやはり言い過ぎなので、一つ提案ですが、
(mathn.rb から不必要な部分を取り除いたような)仕様設定のための File を
用意しておいたらどうでしょうか?
そのなかで
class Fixnum
  alias / rdiv
# alias / div
end
class Rational
  Unify = true
  def inspect
    ....
  end
end
などとしておいて、例えば
  Unify = false
と書き換えれば
1/3+2/3 => Rational(1,1)
となることなどを説明しておいたらどうでしょう?


|int/int -> rational の問題とReal/BigFloat が必要って話は独立のような気が
|するのですが?

私もこれは全然別の問題と思います。

Real class は私のような素人ではなくて、ちゃんとした人が作れば、ある程度
実用的なものができると思うので、皆さん作ってみませんか?
Real の仕様については更に好みがわかれそうなので、選択肢が多ければ多い程
良いと思います。
私の Real class でも速度が遅い点を除けばそれなりに動いています。
Float と違って桁落ちの問題とかの本質的ではないことに余計な神経を使わなく
てもいいのが精神衛生上の利点です。
勿論速度が必要な時は Float を使います。
高速大量計算のことを考えれば Float をなくすることは当分不可能ですので
目的に応じて使い分けています。

ついでですが任意精度と無限精度は全然違うものです。
例えば実数を無限小数で表現する方式の場合、演算結果を標準形に変換する
のは、任意精度なら任意とはいえ必要な桁数があらかじめ決まっていますから
簡単にできますが、無限精度ではそうはいきません。
又乗算に FFT(高速 Fourier 変換) を利用することも不可能です。
勿論任意精度から無限精度を作る方法がないわけではありません。