Re: MOD operator [message #22170 is a reply to message #22040] |
Wed, 18 October 2000 00:00  |
Theo Brauers
Messages: 58 Registered: November 1997
|
Member |
|
|
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.ht ml
|
|
|