@seanmason Regarding your point that converting to doubles is paintful: no argument there.  But without benchmarking or other profiling of the code, it's hard for me at least to guess whether (converting to doubles, calling pow(...), then converting back to a BigDecimal) is any slower than (doing all the math in terms of BigIntegers).

Even if we decided doing everything with BigIntegers was more efficient, we still run into the problem of irrational numbers not being fully representible with our Fraction class.  So it's hard to totally avoid using an imprecise representation somewhere in this area.  (Unless we radically changed our Fraction system to explicitly model irrational roots of numbers.)