Preliminary submission - std.rational and std.typelist
Simen Kjaeraas
simen.kjaras at gmail.com
Mon Oct 8 00:08:57 PDT 2012
On 2012-44-08 06:10, Arlen <arlen.ng at gmx.com> wrote:
> On Sat, Oct 6, 2012 at 1:32 PM, Dmitry Olshansky <dmitry.olsh at gmail.com>
> wrote:
>>
>> Cool, does it work with BigInt?
>>
>
> No it doesn't work with BigInt, but I did look into it today briefly.
> There are issues with BigInt that I'm not sure what to do about:
>
> 1. To convert a BigInt to floating-point one needs to convert it to
> the built-in integer types first. If you go beyond the limits of the
> built-in types (long), then what's the point? You might as well be
> using int or long.
I thought (part of) the point of Rational was to use it when it would
be more fitting than floating-point. If it's only there to be converted
to floating-point, I don't know what it's there for.
As for a workaround, right-shift num and den to reasonable values
(which fit in a long), divide to get a float, and multiply by
2.0^^(log2(num)-log2(den)). Oughta work.
> 2. The functions in std.math don't support BigInt, and most likely
> never will. Even if they did, you would still need multi-precision
> floating point to store the irrational numbers. If you decided to use
> the built-in types, then again what's the point? You might as well go
> with int or long.
The only function you use from std.math is abs, right? That should be
fairly easy to implement for BigInt.
It'd mean you'd have to specialize a bit for BigInt, though (just
create your own abs function that calls the correct one).
Another option: lobby for BigInt support in std.math. :p
Also, irrational numbers? How'd you get those in a *Rational* library? :p
--
Simen
More information about the Digitalmars-d
mailing list