 
 
 
 
 
 
Re: Is there a simple way to transform 1.1 to 11/10?
- To: mathgroup at smc.vnet.net
- Subject: [mg92998] Re: Is there a simple way to transform 1.1 to 11/10?
- From: Bill Rowe <readnews at sbcglobal.net>
- Date: Wed, 22 Oct 2008 05:39:46 -0400 (EDT)
On 10/21/08 at 6:24 AM, alain at geophysik.uni-muenchen.de (Alain
Cochard) wrote:
>I searched the newsgroup and thought I had the solution with
>Rationalize:
>
>In[5]:= Rationalize[1.1,0]
>
>Out[5]= 11/10
>But
>In[9]:= Rationalize[1.000000001,0]
>Out[9]= 999999917/999999918
>In[10]:= N[%,20]
>Out[10]= 1.0000000010000000830
>So any simple way?
Here is one way to achieve what you want.
In[24]:= f[x_] :=
  Module[{r = Rationalize[x, 0], p},
   p = Round@Log[10, Denominator[r]];
   Round[r 10^p]/10^p]
In[25]:= f[1.000000001]
Out[25]= 1000000001/1000000000
I did a few quick tests and this seems to work correctly for
other values. But I have not done extensive testing of this function.
Undoubtedly, the issue with Rationalize[1.000000001,0] is the
nearest machine number to 1000000001/1000000000//N is closer to
999999917/999999918 than 1000000001/1000000000. This issue
(closest machine number) likely impacts the function I created
above as well in a manner not easily predicted. That is, I
suspect for some values the function above will not output what
you expect or desire.

