[phobos] Rational for review
dsimcha at gmail.com
Fri Aug 27 17:48:37 PDT 2010
I've cleaned up/fixed the bit rot in my Rational library. It's
available for review at:
1. Due to bugs in BigInt (mainly 4742
instantiations don't play nicely with builtin integer instantiations.
For example, this doesn't work:
auto a = rational(BigInt(1), 2) * rational(8, 7);
2. I couldn't figure out how to handle the case of user-defined
fixed-width integer types in the decimal conversion (opCast) function,
so it just assumes non-builtin integer types are arbitrary precision.
The biggest problem is lack of a way of introspecting whether the
integer is fixed or arbitrary width and what its fixed width might be if
it is, in fact, fixed. The secondary problem is that I don't know of a
good algorithm (though I'm sure I could find one if I tried) for
converting fixed-width integers to floating point numbers in software.
Arbitrary precision is much easier.
3. There is a small amount of special case ad-hockery to make things
work with std.bigint.BigInt. I consider these bug workarounds. In
principle, everything should work with any user defined arbitrary
precision integer if it overloads everything it's supposed to overload.
More information about the phobos