lilypond-user
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]