[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Scheme conversion inexact->exact question
From: |
David Kastrup |
Subject: |
Re: Scheme conversion inexact->exact question |
Date: |
Tue, 12 Jul 2016 21:50:34 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/25.1.50 (gnu/linux) |
Abraham Lee <address@hidden> writes:
> Does anyone have a solution for the occasional HUGE integers that can be
> created for the numerator/denominator when using inexact->exact?
>
> For example,
>
> (inexact->exact 0.2)
>
> yields
>
> 3602879701896400/18014398509482000
>
> It is correct, but LP doesn't seem to want to deal with such large
> integers, at least for me.
That should get fixed at some point of time: LilyPond's rational numbers
precede Guile's but nowadays maintaining them is a nuisance.
> Can this be reduced to 1/5 somehow? Is there a better way to get a
> rational from a decimal? I can write a crazy function that
> procedurally determines the minimum power of 10 that gives me a
> rational with smaller numbers, but I'd rather not. Any advice is very
> welcome.
guile> (rationalize (inexact->exact 0.2) 1/10000)
1/5
guile> (help rationalize)
`rationalize' is a primitive procedure in the (guile) module.
-- Scheme Procedure: rationalize x eps
Returns the _simplest_ rational number differing from X by no more
than EPS.
As required by R5RS, 'rationalize' only returns an exact result
when both its arguments are exact. Thus, you might need to use
'inexact->exact' on the arguments.
(rationalize (inexact->exact 1.2) 1/100)
=> 6/5
--
David Kastrup