MathGroup Archive 2009

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Unexpected behavior of Floor and IntegerPart

  • To: mathgroup at smc.vnet.net
  • Subject: [mg97918] Re: [mg97872] Unexpected behavior of Floor and IntegerPart
  • From: Bob Hanlon <hanlonr at cox.net>
  • Date: Wed, 25 Mar 2009 05:46:42 -0500 (EST)
  • Reply-to: hanlonr at cox.net

The observed behavior is consistent. If you want the functions to behave 
based on the apparent values rather than the machine numbers, then use 
Rationalize or Round to whatever precision level that you want. This 
will probably just shift the "unexpected behavior" to some other 
condition.

myIntegerPart[x_] :=
  IntegerPart[Rationalize[x]]

myFloor[x_] := Floor[Rationalize[x]]

myIntegerPart[0.29*100]

29

myFloor[0.29*100]

29



Bob Hanlon


On Tue, Mar 24, 2009 at 8:07 AM , Curtis Osterhoudt wrote:

> Dear List,
>    I'm sure this is a result of non-infinite-precision arithmetic, but 
> it would be nice to have a more consistent behavior:
>
> In[26]:= IntegerPart[0.29*100]
>
> Out[26]= 28
>
> In[25]:= Floor[0.29*100]
>
> Out[25]= 28
>
> In[27]:= Floor[(29/100)*100]
>
> Out[27]= 29
>
> In[32]:= (Floor[#1*100] & ) /@ Range[0, 1, 0.01]
>
> Out[32]= {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, \
> 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 28, 30, 31, 32, 33, \
> 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, \
> 51, 52, 53, 54, 55, 56, 57, 57, 59, 60, 61, 62, 63, 64, 65, 66, 67, 
> 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, \
> 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100}
>
> In[33]:= Differences[%]
>
> Out[33]= {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
> \
> 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
> 1,    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, 1, 1, 1, 1, 1, 1, 
> 1, \
> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}
>
>
>
> An interesting hint as to what may be happening is obtained by:
>
> ListPlot[Differences[(Floor[#1*100] & ) /@ Range[0, 100, 0.01]]]
>
>                      Regards,                                     C.O.
>
>
>
> -- 
> ==========================================================
> Curtis Osterhoudt
> cfo at remove_this.lanl.and_this.gov
> PGP Key ID: 0x4DCA2A10
> Please avoid sending me Word or PowerPoint attachments
> See http://www.gnu.org/philosophy/no-word-attachments.html
> ==========================================================


  • Prev by Date: UNDO and Mathematica - how useless is it?
  • Next by Date: Re: Re: Recursive algorithm
  • Previous by thread: Re: Unexpected behavior of Floor and IntegerPart
  • Next by thread: Re: Unexpected behavior of Floor and IntegerPart