Re: Floor doesn't compute in some cases
- To: mathgroup at smc.vnet.net
- Subject: [mg83314] Re: Floor doesn't compute in some cases
- From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
- Date: Sat, 17 Nov 2007 05:24:38 -0500 (EST)
- Organization: The Open University, Milton Keynes, UK
- References: <fhjqkk$3gq$1@smc.vnet.net>
Valeri Astanoff wrote: > Floor doesn't compute in some cases: > > Floor[Log[31]/Log[2]] > > 4 > > ok, but: > > Floor[Log[32]/Log[2]] > > Floor::meprec: Internal precision limit $MaxExtraPrecision = 50.` > reached while evaluating Floor[Log[32]/Log[2]]. >> > > Floor[Log[32]/Log[2]] > > $Version > > 6.0 for Microsoft Windows (32-bit) (June 19, 2007) > > I don't see the reason why... Looking at In/Out[1], we can see that Log[32]/Log[2] is not simplified to 5, and that we need to use FullSimplify or N to get this value. Obviously Floor does not call either functions and uses arbitrary precision arithmetic to compute its result. (And arbitrary precision fails, this is the meaning of the error message.) In[1]:= {Identity[#], N[#], Simplify[#], FullSimplify[#], Floor[#]} &[ Log[32]/Log[2]] During evaluation of In[1]:= Floor::meprec: Internal precision limit \ $MaxExtraPrecision = 50.` reached while evaluating \ Floor[Log[32]/Log[2]]. >> Out[1]= {Log[32]/Log[2], 5., Log[32]/Log[2], 5, Floor[Log[32]/Log[2]]} So to get the expected result, we must force the evaluation or simplification of the logarithms before calling Floor. Note that even though N returns a machine-precision number, 5., the answer returned by Floor is still an exact (infinite-precision) number. In[2]:= Floor[N[Log[32]/Log[2]]] Out[2]= 5 In[3]:= Floor[FullSimplify[Log[32]/Log[2]]] Out[3]= 5 Best regards, -- Jean-Marc