On Wed, Nov 18, 2009 at 3:33 AM, Darren Duncan <dar...@darrenduncan.net> wrote: > Acknowledging that 'FatRat' is current name for above 'Ratio' ... > > pugs-comm...@feather.perl6.nl wrote: >> >> -For applications that really need arbitrary precision denominators >> -as well as numerators, C<Ratio> may be used, which is defined as >> C<Int/Int>. >> +For applications that really need arbitrary precision denominators as >> +well as numerators at the cost of performance, C<Ratio> may be used, >> +which is stored as C<Int/Int>, that is, as arbitrary precision in >> +both parts. There is no literal form for a C<Ratio>, so it must >> +be constructed using C<Ratio.new($nu,$de)>. In general, only math >> +operators with at least one C<Ratio> argument will return another >> +C<Ratio>, to prevent accidental promotion of reasonably fast C<Rat> >> +values into arbitrarily slow C<Ratio> values. > > Given the above, if one wants to construct a full-precision rational value > in terms of 3 Int values analogous to a mantissa and radix and exponent, > what is the best way to write it in Perl 6? > > For example, say I want the following expression to result in a FatRat > because presumably that's the only type which will represent the result > value exactly: > > 45207196 * 10 ** -37 > > How should that be spelled out in terms of 3 integers? > > And note that a decimal-specific answer isn't what I want, since I want > something that would also work for this: > > 45207196 * 11 ** -37 > > Any thoughts? > > Basically where I'm coming from here is the idea that any rational can also > be expressed as 3 integers like the above, not just the > numerator/denominator pair; the 3 integers are advantages both for being > efficient with common pathological cases such as very large or very small > rationals with a small amount of precision, such as the above, as well as > for exactly reflecting the concept of a radix-agnostic floating-point > number.
What's your objection to FatRat.new(45207196, 11 ** 37)? -- Solomon Foster: colo...@gmail.com HarmonyWare, Inc: http://www.harmonyware.com