[Haskell-cafe] reading and writing Data.Ratio.Rational

Mike Ledger eleventynine at gmail.com
Wed Mar 8 04:25:17 UTC 2017


I can never seem to remember to reply-all ...

On Wed, Mar 8, 2017 at 3:24 PM, Mike Ledger <eleventynine at gmail.com> wrote:

> There is also the exact-real and numbers packages which provide exact
> reals with their respective CReal types.
>
> On Wed, Mar 8, 2017 at 6:22 AM, Olaf Klinke <olf at aatal-apotheke.de> wrote:
>
>> Before asking on this list, I wrote my own version which did just what
>> David suggested: Parse the integer before the decimal point, parse the part
>> behind the decimal point and divide the latter by 10^length, then sum both
>> parts. This function has type
>>
>> Fractional t => String -> t
>>
>> I thought that this was maybe very inefficient and therefore looked for
>> prior art. If someone feels it is worth adding to some package, I'm happy
>> to provide the code.
>>
>> Olaf
>>
>>
>> > Am 06.03.2017 um 21:46 schrieb David Feuer <david.feuer at gmail.com>:
>> >
>> > I think your best bet is probably to get your hands dirty and parse it
>> yourself: first grab an integer, then optionally a decimal point, etc.
>> >
>> > On Mar 6, 2017 3:43 PM, "Olaf Klinke" <olf at aatal-apotheke.de> wrote:
>> > Ah, thanks! That is something to build on.
>> >
>> > Olaf
>> > > Am 24.02.2017 um 15:35 schrieb Patrick Chilton <chpatrick at gmail.com>:
>> > >
>> > > Prelude> import Numeric
>> > > Prelude Numeric> fst $ head $ readFloat "0.1234" :: Rational
>> > > 617 % 5000
>> > >
>> > > On Fri, Feb 24, 2017 at 1:17 PM, Olaf Klinke <olf at aatal-apotheke.de>
>> wrote:
>> > > Dear cafe,
>> > >
>> > > when processing text files containing numbers of the form "xxxx.yyyy"
>> I used to parse them into Double using that type's Read instance.
>> Obviously, even with arithmetic no more complicated than the field
>> operations the result might have ugly rounding errors like 12.000000000002
>> due to the fact that numbers like 0.7 are not dyadic rationals. The math in
>> my program is not complicated and the numbers are not large, so I don't
>> care about Rationals having potentially huge memory footprints.
>> > >
>> > > So here's my question. A literal like 0.7 has type Fractional a => a,
>> but the Read instance of Rational rejects the string "0.7". Must it be this
>> way? Do I have to go via toRational.(read :: String ->
>> Data.Scientific.Scientific)?
>> > >
>> > > Note that the documentation of Data.Scientific explicitly states that
>> using (/) is unsafe, so I'd rather stay with the field Rational.
>> > >
>> > > For the output as decimal expansion, there is of course long division
>> as described here [1], but I wonder whether either this exists in some
>> library or there is even a more efficient solution.
>> > >
>> > > Any pointers are appreciated.
>> > > Thanks,
>> > > Olaf
>> > >
>> > > [1] http://stackoverflow.com/questions/30931369/how-to-convert-
>> a-rational-into-a-pretty-string
>> > > _______________________________________________
>> > > Haskell-Cafe mailing list
>> > > To (un)subscribe, modify options or view archives go to:
>> > > http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
>> > > Only members subscribed via the mailman list are allowed to post.
>> > >
>> >
>> > _______________________________________________
>> > Haskell-Cafe mailing list
>> > To (un)subscribe, modify options or view archives go to:
>> > http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
>> > Only members subscribed via the mailman list are allowed to post.
>>
>> _______________________________________________
>> Haskell-Cafe mailing list
>> To (un)subscribe, modify options or view archives go to:
>> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
>> Only members subscribed via the mailman list are allowed to post.
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20170308/5e577ade/attachment.html>


More information about the Haskell-Cafe mailing list