有理数の平方根を扱う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.は、代数的数ですが、これは演算できない予感がする。
1.ができると面白そうですね。