Preliminary submission - std.rational and std.typelist

Arlen arlen.ng at gmx.com
Mon Oct 8 09:04:59 PDT 2012


On Mon, Oct 8, 2012 at 2:08 AM, Simen Kjaeraas <simen.kjaras at gmail.com> wrote:
> On 2012-44-08 06:10, Arlen <arlen.ng at gmx.com> wrote:
>
>>
>> 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.
>

Some computations with rational numbers produce irrational numbers,
and to store irrational numbers you need real numbers.  What do we do
in those cases?

> 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).
>

Yes, std.math.abs and std.numeric.gcd are very easy to implement for
BigInt, but I'm not talking about those.  I'm talking about things
like std.math.pow(), and std.math.log().


More information about the Digitalmars-d mailing list