[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Plot bug or another "strange feature" ?
Paul van Delst wrote:
>
> Nicolas Decoster wrote:
> >
> > Hi.
> >
> > Does anybody notice and, eventually, know how to handle this "strange
> > feature" of the plot procedure ?
> >
> > IDL> s = indgen(1000) + 1000000000
> > IDL> plot, s, /ynozero
> >
> > The plot is not a clean line joining down-left and up-right corners, but
> > an ugly stairway...
>
> I thought that sort of thing came about because:
>
> a) PLOT converts all its arguments to single precision floats. Do a
> PRINT, FLOAT(s[0:100]),FORMAT='(e20.13)' to see what happens to the
> float'd integers,
>
> b) people think they can represent numbers at the extremes of machine
> precision exactly. Your "s" array, when converted to single precision
> float, changes in the 8th or 9th d.p. While I think that IDL should
> allow users to set the PLOT conversion to double precision if they want
> (e.g. with a DOUBLE keyword or something), in general you can't expect
> these sorts of numbers to be represented well - in IDL or any language.
> That's not how floating point arithmetic works. All floating point
> numbers are approximations to their actual value.
I mainly agree with you. But "s" array is not a double array, it is a
long array:
IDL> help, s
S LONG = Array[1000]
I agree with you that plot converts everything to floating point number.
But I think that it is important to see exactly what are the values of
my integers (in fact my long integers) in a graph. And it is the same
with double precision floating point numbers: I am not talking about the
representation of real world numbers using floating point numbers.
Example:
IDL> b = [100000000.00000001d, 100000000.00000003d]
IDL> print, b, format = '(e22.16)'
1.0000000000000001e+08
1.0000000000000003e+08
IDL> plot, b, /ynozero
% PLOT: Data range for axis has zero length.
% Execution halted at: $MAIN$
Yes, perhaps a keyword would be fine, here. Or better, a plot procedure
that computes the data range according to the precision of the data.
Later,
Nicolas.
--
Tél. : 00 (33) 5 62 88 11 16
Fax : 00 (33) 5 62 88 11 12
Nicolas.Decoster@Noveltis.fr
Noveltis
Parc Technologique du Canal
2, avenue de l'Europe
31520 Ramonville Saint Agne - France