[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: MOD operator
Thanks for your help. In the meantime I found (with help from Franz Rohrer
and Markus Fuehrer) that there is a difference between
a MOD b = a-INT(a/b)*b
and
modulo(a,b) = a-FLOOR(a/b)*b
I wrote an function calc_modulo
------
FUNCTION calc_modulo, a, b
RETURN, a - FLOOR(a/b)*b
END
------
which works fine for me.
Cheers Theo
>
> Theo Brauers wrote:
> >
> > I was wondering if the result of the MOD operator in IDL changed
> > from previous versions (4.x, 5.0) to the current version (5.3.1).
> > Now the output is:
> >
> > IDL> PRINT, (FINDGEN(8)-4.) MOD 3
> > -1.00000 0.000000 -2.00000 -1.00000 0.000000
> > 1.00000 2.00000 0.000000
> >
> > When I programmed a function long ago I used the MOD operator
> > expecting the output
> >
> > IDL> PRINT, (FINDGEN(8)-4.) MOD 3
> > 2.00000 0.000000 1.00000 2.00000 0.000000
> > 1.00000 2.00000 0.000000
> >
>
> To the best of my knowledge, this is always the way IDL (and most other
> languages providing a MOD operator) has worked. If you wish to take the
> mod of a negative number , the result will be a negative number between
> -(n+1) and 0. A positive input yields a positive result. So when we're
> trying to limit a value to between 0 and 2*pi, we often end up with code
> that looks something like:
>
> x = ((y mod (2*pi)) + 2*pi) mod (2*pi)
>
> Hope this helps.
>
> Phillip
--
----------------------------------------------
Dr. Theo Brauers
Institut fuer Atmosphaerische Chemie (ICG-3)
Forschungszentrum Juelich
52425 JUELICH, Germany
Tel. +49-2461-61-6646 Fax. +49-2461-61-5346
http://www.kfa-juelich.de/icg/icg3/MITARBEITER/th.brauers.html