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: tisimst
Subject: Re: Scheme conversion inexact->exact question
Date: Tue, 12 Jul 2016 13:18:31 -0700 (MST)



On Tue, Jul 12, 2016 at 1:51 PM, David Kastrup [via Lilypond] <[hidden email]> wrote:
Abraham Lee <[hidden email]> 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.

Good to know.
 
> 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

Brilliant! I was trying to figure out how to make that function work, thinking it would be what I needed, and those two examples were perfect in helping me understand how to use it effectively. I'm back on the road again! Thank you, David!

--
Abraham Lee 


View this message in context: Re: Scheme conversion inexact->exact question
Sent from the User mailing list archive at Nabble.com.

reply via email to

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