Re: Mathematica bugs?
- To: mathgroup at smc.vnet.net
- Subject: [mg67323] Re: [mg67301] Mathematica bugs?
- From: "Carl K. Woll" <carlw at wolfram.com>
- Date: Sun, 18 Jun 2006 05:13:17 -0400 (EDT)
- References: <200606170836.EAA27990@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Yaroslav Bulatov wrote: > When I run the following line > x = Pi/4; For[i = 0, i < 56, i += 1, x = 2*Abs[x - 1/2]]; N[x] > I get > 3. > > But x should always stay between 0 and 1, why do I get 3? > > Also > x = Pi/4; For[i = 0, i < 50, i += 1, x = 2*Abs[x - 1/2]]; N[Log[x]] > gives me > Indeterminate > > How can I get an indeterminate here? Look at x instead of N[x] (i use i<5 instead): In[14]:= x = Pi/4; For[i = 0, i < 5, i += 1, x = 2*Abs[x - 1/2]]; {x, N[x]} Out[14]= {2 (1/2 - 2 (-1/2 + 2 (1/2 - 2 (-1/2 + 2 (-1/2 + Ï?/4))))), 0.132741} You see that Mathematica is smart enough to figure out that x-1/2 is positive, so that the Abs is unnecessary. On the other hand, Mathematica is not expanding x out, so x becomes a bigger and bigger expression as i increases. Eventually, the expression involves so many multiplications and subtractions that applying N to x experiences catastrophic numerical cancellations. The solution is simple. Use extended precision numbers: In[16]:= x = Pi/4; For[i = 0, i < 56, i += 1, x = 2*Abs[x - 1/2]]; N[x, 20] Out[16]= 0.79387245267980382900 You can even use extended precision numbers with only 2 digits of precision: In[17]:= x = Pi/4; For[i = 0, i < 56, i += 1, x = 2*Abs[x - 1/2]]; N[x, 2] Out[17]= 0.79 Carl Woll Wolfram Research
- References:
- Mathematica bugs?
- From: "Yaroslav Bulatov" <yaroslavvb@gmail.com>
- Mathematica bugs?