Re: PlotRange Trouble
- To: mathgroup at smc.vnet.net
- Subject: [mg90423] Re: PlotRange Trouble
- From: "Jean-Marc Gulliet" <jeanmarc.gulliet at gmail.com>
- Date: Wed, 9 Jul 2008 04:52:13 -0400 (EDT)
- References: <g4vk60$9o3$1@smc.vnet.net> <487365C3.6050407@gmail.com>
On Tue, Jul 8, 2008 at 4:44 PM, Aaron Fude <aaronfude at gmail.com> wrote: > > On Tue, Jul 8, 2008 at 9:04 AM, Jean-Marc Gulliet > <jeanmarc.gulliet at gmail.com> wrote: >> >> Aaron Fude wrote: >> >>> I may be wondering why I need this, but I do: >>> >>> ParametricPlot[{10^-600 z, z}, {z, 0, 100}, >>> PlotRange -> {{0, 10^-100}, {0, 100}}, AspectRatio -> 1] >>> >>> works perfectly, but >>> >>> ParametricPlot[{10^-600 z, z}, {z, 0, 100}, >>> PlotRange -> {{0, 10^-600}, {0, 100}}, AspectRatio -> 1] >>> >>> fails. What gives? >> >> The following expressions work "perfectly", since they do not produce any >> error messages. >> >> ParametricPlot[{10^-600 z, z}, {z, 0, 100}, >> PlotRange -> {{0, 10.^-600}, {0, 100}}, AspectRatio -> 1] >> >> ParametricPlot[{10^-600 z, z}, {z, 0, 100}, >> PlotRange -> {All, {0, 100}}, AspectRatio -> 1] > > > Thanks! Well, But that's a case where I would like to find out what's wrong > with my way rather than how to fix it. What's wrong with 10^-600. The fact > that it is smaller than the smallest double? Correct. You have to keep in mind two things. First, plotting functions use only machine-precision numbers internally. In other words, though one can writes numeric arguments as infinite-precision (exact) numbers, these values are going to be converted into machine-size numbers. If some arguments are out of the range of machine-precision numbers, Mathematica complains. Second, writting 10^-600 (infinite precision) as 10.^-600 does not make it machine-size but *arbitrary-precision* number. Why it is so? Because Mathematica automatically converts non-infinite-precision numbers smaller than $MinMachineNumber into arbitrary-precision numbers. In[1]:= $MinMachineNumber Out[1]= 2.22507*10^-308 In[2]:= 10.^-600 Out[2]= 9.99999999999999*10^-601 In[3]:= % // Precision Out[3]= 15.6536 In[4]:= $MinMachineNumber // Precision Out[4]= MachinePrecision In[5]:= $MachinePrecision Out[5]= 15.9546 Notice that, though 10.^-600 as a precision very close to that of a machine-size number, it is an arbitrary-precison number and not a hardware-precision number. So, when you write PlotRange -> {{0, 10^-600}, {0, 100}}, you are asking the plotting function to draw a graph using an x-axis which is indistinguishable from the closed interval [0, 0] :-) HTH, -- Jean-Marc