|
From: | tisimst |
Subject: | Re: Scheme conversion inexact->exact question |
Date: | Tue, 12 Jul 2016 13:18:31 -0700 (MST) |
Abraham Lee <[hidden email]> writes:That should get fixed at some point of time: LilyPond's rational numbers
> 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.
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
[Prev in Thread] | Current Thread | [Next in Thread] |