Re: no backwards compatibility in IDL 5.6 [message #34253 is a reply to message #34251] |
Thu, 27 February 2003 10:41   |
Richard Younger
Messages: 43 Registered: November 2000
|
Member |
|
|
William Thompson wrote:
>
> Evidently, the change in behavior was introduced in 5.5 or 5.5a.
[...]
> A better solution may be to separate out the real and imaginary parts, and
> pass them to ATAN separately, e.g.
>
> IDL> x = complex(3,4)
> IDL> print,atan(x) ;Under 5.4.1 or below
> 0.927295
> IDL> print,atan(imaginary(x),float(x))
> 0.927295
>
> Although you'd still have to worry about the distinction between single and
> double-precision complex numbers.
The behavior was changed in 5.5. It's slower and takes more memory to
separate the complex and real parts out. See threads from ~6-8 months ago:
http://groups.google.com/groups?selm=on660zqax4.fsf%40cow.ph ysics.wisc.edu
http://groups.google.com/groups?selm=ony9b7s7vc.fsf%40cow.ph ysics.wisc.edu
5.5 (not coincidentally I think) was also when they introduced the REAL_PART()
function, which returns float or double precision depending on the source. Of
course, this wasn't in the online documentation, just in the printed update,
which is a whole 'nother issue.
Even though the atan() change broke my code, slowed it down, and cost me time,
I come down on the "terribly annoying" side rather than calling it
"dangerous". I just made sure to test all my critical code before migrating
fully to 5.5, and the slowdown only cost my minutes-long runtime a few
seconds.
Fortunately, I only have to deal with old versions a little. I can imagine
that people maintaining critical code for large department-fulls of licenses
would be a little more grumpy about the change.
Best,
Rich Younger
|
|
|