[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
IDL> help, s
S LONG = Array
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.
IDL> b = [100000000.00000001d, 100000000.00000003d]
IDL> print, b, format = '(e22.16)'
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.
TÚl. : 00 (33) 5 62 88 11 16
Fax : 00 (33) 5 62 88 11 12
Parc Technologique du Canal
2, avenue de l'Europe
31520 Ramonville Saint Agne - France