I've cleaned up/fixed the bit rot in my Rational library. It's available for review at: http://dsource.org/projects/scrapple/browser/trunk/rational/rational.d?rev=785 .

Known issues:

1. Due to bugs in BigInt (mainly 4742 http://d.puremagic.com/issues/show_bug.cgi?id=4742), BigInt 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.
_______________________________________________
phobos mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/phobos

Reply via email to