有理数の平方根を扱うRubyクラスを作った

有理数平方根や、その合計値を式を保持して扱います。(複素数の範囲はサポートしません)

Wikipediaのフィボナッチ数#一般項にあるような式を扱ったりできます。

コード:RtNumber: handles sum of rational numbers' sqrt — Gist

コードに付属してるサンプル:

a = Math.ratsqrt(3)+Math.ratsqrt(2)
puts "1/(#{a}) = #{1/a}" # => 1/(rt(2)+rt(3)) = -rt(2)+rt(3)
phi = (1+Math.ratsqrt(5))/2
phi2 = (1-Math.ratsqrt(5))/2
rt5 = Math.ratsqrt(5)
[*(0..10),100,300,1000,10000,100000].each do|i|
  puts "fib(#{i}) = #{((phi**i-phi2**i)/rt5).to_i}" # => フィボナッチ数列が出力される
end

これは、式を保持する数値クラスのテストとして書いたものですが、以下のような拡張ができると思います。

  1. 平方根をネストできるようにする。
  2. 平方根だけでなく累乗根をサポートする。
  3. n次方程式の解で表現される数値クラスを作る。

1.は、確か「作図」されうる図形を表現できる数値クラスだったと思う(初等幾何の問題とかが解けそう)のですが、どうでしたっけ。

2.は、いわゆる「解の公式」として認められる数値クラスですね。

3.は、代数的数ですが、これは演算できない予感がする。

1.ができると面白そうですね。