An Ultranumber will stay rational for as long as possible. In fact, it might even attempt to stay in some sort of factored form. As long as it can, it won't lose precision under any circumstances. If it has to, it will drop to floating-point precision. It will support all operators and its worst-case performance will never be bad.
Pity I'm too lazy to do it.
Sure would be handy, though.